lambda函数nothrow_move_assignable?

时间:2016-10-24 16:42:14

标签: c++ lambda typetraits

clang-cl(4.0.0-trunk)似乎认为是,而vc2015(update3)认为没有。

是否定义了这个实现,或者标准规定了lambda函数应该如何实现或不实现和移动可分配?

#include <type_traits>
#include <iostream>

template <typename T>
void test_nothrow_move_assignable(T&&) {
  std::cout << std::boolalpha
    << std::is_nothrow_move_assignable<T>::value
    << "\n";
}

int main() {
  test_nothrow_move_assignable([]{});
  return 0;
}

// $ clang-cl.exe scratch.cpp
// $ scratch.exe
// true

// $ cl /nologo /EHsc scratch.cpp
// scratch.cpp
// $ scratch.exe
// false

1 个答案:

答案 0 :(得分:4)

这是铿锵的错误。来自[expr.prim.lambda]:

  

lambda-expression 关联的闭包类型没有默认构造函数和已删除的复制赋值   操作即可。它有一个默认的复制构造函数和一个默认的移动构造函数(12.8)。

因此,类型不应该是可分配的,更不用说移动可分配了。