Общая лямбда во внешнем «C» функция

Следующий код принят gcc 6 и clang 4, но MSVC 2017, который утверждает, что поддерживает C ++ 14 (и общие лямбды в частности), отбрасывает его error C2894: templates cannot be declared to have 'C' linkage

extern "C" void f() {
std::vector<int> v { 1, 2, 3 };
std::for_each(std::begin(v), std::end(v), [](auto& x) {
x++;
});
std::cout << v[0];
}

Я понимаю, что универсальная лямбда внутренне переводится в некоторую структуру с шаблонным оператором вызова, но как она мешает внешнему «С»?

Это ошибка в MSVC? Можете ли вы предложить обходной путь для использования общих лямбда-выражений во внешних функциях «C»?

ОБНОВИТЬ

Я сообщил об этой проблеме в Microsoft, и ответ был

Спасибо за ваш отзыв! Мы определили, что эта проблема не является ошибкой. См MSDN https://msdn.microsoft.com/en-us/library/95bhc9c2.aspx

что мало что объясняет.

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector