
項目 3:decltype を理解する
|
17
resetV({ 1, 2, 3 }); // error! can't deduce type
// for { 1, 2, 3 }
エラー! { 1, 2, 3 } の型を推論できない
重要ポイント
•
auto の型推論は通常はテンプレートのそれと同様だが、auto では波括弧で囲んだ初期化子
を std::initializer_list と想定する点が異なる。
•
関数の戻り型やラムダ式の仮引数での auto はテンプレートの型推論と同じ動作となり、auto
の型推論とは異なる。
項目 3:decltype を理解する
decltype はまったくおかしな代物です。名前や式を与えるとその型を教えてくれます。通常は
予想通りの型を教えてくれますが、頭をかきむしったり、確認のために仕様やオンライン上の Q&A
サイトを探しまくらなければならないような結果を返すこともあります。
まずは一般的な例から始めましょう。すんなり受け入れられるありふれた例です。テンプレート、
auto の型推論の動作とは対照的に(項目 1 および項目 2 を参照)、decltype は、通常は、与えられ
た名前や式の正確な型をそのまま返します。
const int i = 0; // decltype(i) is const int
decltype(i) は const int
bool f(const Widget& w); // decltype(w) is const Widget& ...