Дано:
decltype(auto) f1()
{
int x = 0;
return x; // decltype(x) is int, so f1 returns int
}
decltype(auto) f2()
{
int x = 0;
return (x); // decltype((x)) is int&, so f2 returns int&
}
(Взято из Скотта Майера "Эффективный современный С++" ).
Теперь, если я нашел правильный параграф, Раздел 7.1.5.2 Спецификаторы простого типа [dcl.type.simple] стандарта С++ говорят:
Если e является id-выражением или доступом к члену класса (5.2.5 [expr.ref]), decltype (e) определяется как тип объекта, названного e
и пример из этого раздела:
struct A { double x; }
const A* a = new A();
decltype((a->x)); // type is const double&
Теперь, интересно, почему в decltype((x))
выводится int&
в книге.