以下适用于 gcc 5.2 和 clang 3.7,但不适用于 msvc 2015:
#include <functional>
int main()
{
auto const foo = [](auto&& i) {
auto const bar = []{ return 100; };
return bar();
};
std::function<int(int)> fn = foo;
return 0;
}
是msvc的bug还是gcc和clang太松了?
最佳答案
如果我尝试使用 Microsoft's official online compiler ,版本 19.00.23602.0(x86) 最后更新于 2015 年 12 月 3 日,我得到执行超时1。删除 std::function<int(int)> fn = foo;
将允许编译成功。欢迎通过 Visual Studio Connect 告知 Microsoft这样他们就可以调查错误并报告它。是的,人们可能会浪费时间翻阅标准以查看这是否是“合法”代码,但使用错误跟踪器会让您物有所值。
1 内部编译器错误始终是错误。
关于c++ - msvc std::function 不接受带有嵌套 lambda 的通用 lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34248067/