FCD の 148 ページの例の最後の行 (§7.6.1.2/4) が理解できません。
const int&& foo();
int i;
struct A { double x; };
const A* a = new A();
decltype(foo()) x1 = i; // type is const int&&
decltype(i) x2; // type is int
decltype(a->x) x3; // type is double
decltype((a->x)) x4 = x3; // type is const double&
ここで括弧がなぜ重要なのでしょうか? 単純にdouble
上の行のようにすればよいのではないでしょうか?
ベストアンサー1
その例のすぐ上には、
- eが括弧で囲まれていないID式またはクラスメンバーアクセス(5.2.5)である場合、decltype(e)はeで指定されたエンティティの型になります。
- e が lvalue の場合、decltype(e) は T& になります。ここで、T は e の型です。
decltype(a->x)
これは「クラス メンバー アクセス」の例であり、decltype((a->x))
lvalue の例であると思います。