C++14で実装されるジェネリックラムダの引数の型auto
は、テンプレート引数と同じ型推論が行われます。なので引数の右辺値参照が左辺値参照にもなります。
#include <iostream> #include <type_traits> #include <utility> int main() { auto lam = [](auto&& val) { using type = decltype(val); std::cout << "rvalue : " << std::is_rvalue_reference<type>::value << std::endl; std::cout << "lvalue : " << std::is_lvalue_reference<type>::value << std::endl; }; int x = 42; lam(x); std::cout << "------" << std::endl; lam(std::move(x)); }
実行結果
rvalue : 0 lvalue : 1 ------ rvalue : 1 lvalue : 0 0