Étant donné la définition du type A
:
struct A { int i; };
Selon le cahier des charges [expr.ref] (J'ai utilisé n4618 ) :
(si
E2
est non référencée,) ...SiE1
est une lvalue, alorsE1.E2
est une lvalue ; sinonE1.E2
est un xvalue ...
évidemment A{}.i
est xvalue ; étant donné également que [dcl.type.simple] :
(pour
decltype(e)
,) - ... sie
est un sans parenthèse ou une expression d'identification sans parenthèse accès aux membres de la classe... - sinon sie
est un xvalue , decltype(e) est T&& où T est le type dee
donc, decltype( ( A{}.i ) )
donne lieu à int&& .
Cependant, j'ai essayé GCC5.1 et Clang3.9, qui donnent les résultats suivants int tandis que vs2015u3 donne int&& . Lequel est correct ?