我正在测试Visual Studio 2015 Update 3,当我处理lambda时,我的编译失败。
这是一个最小的例子(我知道移动一个const ref并不真正做一个动作,这是为了这个例子):
#include <utility>
struct A
{
};
void f(const A& a, const A& b)
{
auto aa = std::move(a); // compiles
auto l3 = [bb = std::move(b)]() {}; // fails
}
int main()
{
return 0;
}
使用gcc 4.9+和clang编译,但msvc14失败并出现错误:
source_file.cpp(10):错误C2440:'':无法从'const A'转换为'f ::'
source_file.cpp(10):注意:没有构造函数可以采用源类型,或者构造函数重载解析是不明确的
我想理解,虽然此举是为aa而非bb接受。
如果我的代码在标准方面是正确的。