clang-cl(4.0.0-trunk)はvc2015(update3)はいいとは思わないのですが、そう思えるようです。ラムダ関数はnothrow_move_assignableですか?
この実装は定義されていますか、または標準は、ラムダ関数をどのように実装するか、割り当てないで移動するかどうかを決定しますか?
#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
私はクロージャのタイプがmove assignableであるとは思わなかった。 – aschepler