http://en.cppreference.com/w/cpp/language/decltypeによると
struct A {
double x;
};
const A* a = new A();
decltype( a->x ) x3;
1 つのケースに一致します。つまり:
引数が、括弧で囲まれていないオブジェクト/関数の名前であるか、メンバー アクセス式 (object.member または pointer->member) である場合、 は、decltype
この式で指定されたエンティティの宣言された型を指定します。
しかし、このメモ:
オブジェクトの名前が括弧で囲まれている場合、左辺値式になります
次の質問に私を導きます:a->x
左辺値式でない場合の型は何ですか?
理由もわかりません
decltype((a->x)) x4 = x3; // type of x4 is const double& (lvalue expression)
は、左辺値式と見なされるという事実によってのみ として評価されconst&
ます。リンクは実際には表示されません。