Предполагая, что вы имели в виду decltype(B::a)
, я не понимаю, почему вы ожидаете, что он вернет const int
.
decltype(x)
примерно дает вам "тип x
, объявленный как" , что в данном случае равно int
.
Вот интересный пример:
int main()
{
B x{};
static_assert(std::is_same_v<decltype(x.a), int>); // (0)
static_assert(std::is_same_v<decltype((x.a)), const int&>); // (1)
}
(0) сообщает, что объявленный тип x.a
действительно int
, хотя x
равно const
.
(1) говорит о том, что категория значений x.a
является lvalue , который равен const
.
(обратите внимание, что decltype
ведет себя по-разному с выражениями в скобках .)