2
次のコードの結果は0100です(CLang、GNU ++ 14に準拠)。 funcはパラメータとしてrvalueベクトルを取るので、forward(c)[0]はintのconst参照であるため、decltype(auto)の型減算はconst int &になるはずです。結果を理解するのを手伝ってください。ありがとう!なぜrvalueの要素からのdecltype(auto)の型減算int vector is int&?
template <typename T>
decltype(auto) func(T&& c)
{
return forward<T>(c)[0];
}
int main(int argc, const char * argv[])
{
cout
<< is_same< int, decltype(func(vector<int>{3}))>::value
<< is_same< int&, decltype(func(vector<int>{3}))>::value
<< is_same< const int, decltype(func(vector<int>{3}))>::value
<< is_same< const int&, decltype(func(vector<int>{3}))>::value
<< endl;
return 0;
}
出力:
0100
'std2'?前にそれについて聞いたことはありません。あなたが指摘する参考資料はありますか?ありがとうございました。また、 'decltype(auto)'では実際の型、つまり 'U 'ではなく' operator'の 'U'であるという事実についての質問でした。 – skypjack
@skypjackコンパイラは実際に 'int&'を返し、OPは 'const int&'を期待していました。 –
@ A.S.Hああ、そうです。質問のコメントを逃した。ごめんなさい。 – skypjack