以下代码被 gcc 6 和 clang 4 接受,但声称支持 C++14(尤其是通用 lambda)的 MSVC 2017 将其丢弃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 在内部转换为具有模板化调用运算符的某些结构,但它如何干扰外部“C”?
这是MSVC中的错误吗?您能否建议在外部“C”函数中使用通用 lambda 的解决方法?
更新
我向微软报告了这个问题,得到的回应是
感谢您的反馈意见!我们已确定此问题不是错误。请参阅 msdn https://msdn.microsoft.com/en-us/library/95bhc9c2.aspx
这并不能解释太多。