以下代码被gcc 6和clang 4接受,但声称支持C ++ 14的MSVC 2017(特别是通用lambdas)将其丢弃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];
}
我理解泛型lambda在内部被翻译成带有模板化调用操作符的结构但是它如何干扰extern“C”?
这是MSVC中的错误吗?你能建议在extern“C”函数中使用泛型lambda的解决方法吗?
更新
我向Microsoft报告了此问题,回复是
感谢您的反馈!我们已确定此问题不是错误。请参见msdn https://msdn.microsoft.com/en-us/library/95bhc9c2.aspx
没有解释太多。