yohhoyの日記

技術的メモをしていきたい日記

auto&&の落とし穴

C++11で導入されたautoによる型推論とrvalue参照(T&&)に関するメモ。

auto&&による型推論の結果が常にrvalue参照型となるとは限らない。

int x;

auto   t0 = x;  // t0はint型
auto&  t1 = x;  // t1はint&型
auto&& t2 = x;  // t2はint&型(int&&型ではない)
auto&& t3 = std::move(x);  // t3はint&&型

auto   v0 = 42;  // v0はint型
auto&  v1 = 42;  // v1はint&型 → 42はprvalueのためill-formed
auto&& v2 = 42;  // v2はint&&型

変数t2では “reference collapsing” によって int& &&int& 型となる。

関連URL