めったに見ませんが、見かけると、関数から戻るときdecltype(auto)
と同じことを行うように見えるため、混乱します。auto
auto g() { return expr; }
decltype(auto) g() { return expr; }
これら 2 つの構文の違いは何ですか?
ベストアンサー1
auto
テンプレート引数の推論ルールに従い、常にオブジェクト型です。値カテゴリに基づいて参照型を推論するルールdecltype(auto)
に従いますdecltype
。つまり、
int x;
int && f();
それから
expression auto decltype(auto)
----------------------------------------
10 int int
x int int
(x) int int &
f() int int &&