это не распространяется на зависимые типы - PullRequest
0 голосов
/ 26 августа 2018

Почему для

struct A { int a };   
using B = const A;    // or typedef const A B;

decltype(B::a) оценивается как int, а не const int.Какую главу Как выучить C ++ за всю жизнь мне не хватает?

1 Ответ

0 голосов
/ 26 августа 2018

Предполагая, что вы имели в виду 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 ведет себя по-разному с выражениями в скобках .)

...