msvc std :: function不接受带有嵌套lambda的通用lambda
以下版本适用于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中的错误还是gcc和clang太松懈?
如果我使用微软官方在线编译器(这是2015年12月3日更新的版本19.00.23602.0(x86))尝试此操作,我会执行超时1。 删除std::function<int(int)> fn = foo;
将允许成功编译。 请随时通过Visual Studio Connect让Microsoft知道,以便他们可以调查并报告错误。 是的,人们可以浪费时间翻阅标准,看看这是否是“合法”的代码,但通过使用错误跟踪器,您将获得更大的回报。
1内部编译器错误总是一个错误。
这是Visual C ++ 2015中的一个错误,但它似乎在更新3中得到修复。解决方法是指定外部lambda的返回类型(感谢melak47)。
这失败了:
#include <functional>
int main()
{
std::function<void (bool)> f =
[](auto&&)
{
[]{};
};
}
有:
Microsoft (R) C/C++ Optimizing Compiler Version 19.00.23506 for x64 Copyright (C) Microsoft Corporation. All rights reserved. a.cpp C:Program Files (x86)Microsoft Visual Studio 14.0VCINCLUDEtype_traits(1348): error C2065: '_Args': undeclared identifier [...and more]
但是这工作:
#include <functional>
int main()
{
std::function<void (bool)> f =
[](auto&&) -> void
{
[]{};
};
}
链接地址: http://www.djcxy.com/p/72529.html
上一篇: msvc std::function doesn't accept generic lambda with a nested lambda