Учитывая определение типа A
:
struct A { int i; };
В соответствии со спецификацией [expr.ref] (я использовал n4618):
(если
E2
не ссылается,)... ЕслиE1
является lvalue, тоE1.E2
является lvalue; иначеE1.E2
- это значение x...
очевидно A{}.i
- значение x;
также учитывая, что [dcl.type.simple]:
(для
decltype(e)
,) -... ife
- это несферированное id-выражение или unparenthesized доступ к члену класса... - в противном случае, еслиe
является значением x, decltype (e) является T & &, где T является типомe
поэтому decltype( ( A{}.i ) )
должен давать int &.
Однако я пробовал GCC5.1 и Clang3.9, они дают int, а vs2015u3 дает int &. Что правильно?