Следующий код принят 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
что мало что объясняет.
Задача ещё не решена.
Других решений пока нет …