Ответ 1
Да. С++ 14, §5.2.5/4.2, с учетом E1.E2
:
Если
E2
- нестатический член данных, а типE1
- это "cq1 vq1 X", а типE2
- "cq2 vq2 T", выражение обозначает именованный член объект, обозначенный первым выражением. ЕслиE1
- значение l, тоE1.E2
- значение l; иначеE1.E2
- это значение x.
Педантично, первоначально С++ 11 классифицировал это как prvalue, но такая классификация была бессмысленной, поэтому она была изменена. Если изменение было применено в отчете о дефектах, то, однако, это ретроактивно - опубликованный стандартный документ С++ 11 N3290 неверен, а документ С++ 14 определяет С++ 11. Вероятно, это так, поскольку в противном случае компиляторы должны были бы выполнить тонкую разницу в поведении между -std=c++11
и -std=c++14
. Сейчас я ленив искать DRs.