对于const变量,移动的Lambda捕获失败

时间:2016-08-25 13:55:44

标签: c++ visual-c++ lambda visual-studio-2015 c++14

我正在测试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接受。

如果我的代码在标准方面是正确的。

0 个答案:

没有答案