Это int
.
За [dcl.type.simple] / 4 :
Для выражения e
тип, обозначенный decltype(e)
, определяется как
следующим образом:
[...]
в противном случае, если e
является не заключенным в скобки id-выражением или доступ к члену класса без скобок , decltype(e)
является типом
юридическое лицо, названное e
. Если такой сущности нет или e
имен
набор перегруженных функций, программа некорректна;
[...]
Сущность, названная S{}.a
, является a
, которая имеет тип int
.
Следовательно, decltype(S{}.a)
обозначает тип int
.
(Спасибо комментарий за указание на это!)
Как уже упоминалось в комментарии , хотя тип, обозначенный decltype(S{}.a)
, равен int
, S{}.a
является значением x и может быть привязан к int&&
, как в:
int&& rv = S{}.a;