私は次のタプルビジネスに少し困惑しています:
int testint = 1;
float testfloat = .1f;
std::tie( testint, testfloat ) = std::make_tuple( testint, testfloat );
std::tuple<int&, float&> test = std::make_tuple( testint, testfloat );
それは機能しstd::tie
ますが、参照のタプルに直接割り当ててもコンパイルされず、
「エラー: 'std::tuple<int, float>' から非スカラー型 'std::tuple<int&, float&>' への変換が要求されました」
また
「std::tuple<int, float> から std::tuple<int&, float&> への適切なユーザー定義の変換がありません」
なんで?これを行うことで、実際に割り当てられているのと同じタイプであるかどうか、コンパイラで再確認しました。
static_assert( std::is_same<decltype( std::tie( testint, testfloat ) ), std::tuple<int&, float&>>::value, "??" );
これは真と評価されます。
また、オンラインで msvc の障害であるかどうかを確認しましたが、すべてのコンパイラで同じ結果が得られました。