3

以下代码被 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

这并不能解释太多。

4

0 回答 0