станд :: remove_reference_t имеет значение заказ? - PullRequest
8 голосов
/ 06 января 2020

Имеет ли значение, в каком порядке применяется следующее?

std::remove_reference_t<std::remove_cv_t<T>>

или

std::remove_cv_t<std::remove_reference_t<T>>

В каком сценарии, если таковой имеется, имеет значение заказ

1 Ответ

7 голосов
/ 06 января 2020

Бывают случаи, когда эти два типа черт дают разные результаты. Например, давайте рассмотрим T = const int&.

  1. std::remove_cv_t удалит cv-квалификатор верхнего уровня, превратив const int& в const int&, потому что нет cv верхнего уровня -qualifier. std::remove_reference_t вернет const int.

  2. Во втором случае std::remove_reference_t вернет const int, а std::remove_cv_t преобразует его в int.

Простая демонстрация

...