std :: remove_reference_t <std :: remove_cv_t <T>> o pedido importa?

8

Importa em que ordem o seguinte é aplicado?

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

ou

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

Em que cenário, se houver, o pedido importa?

darune
fonte
2
Tente aplicá-lo const int&. Você deve entrar const intno primeiro caso e intno segundo.
Evg 6/01
Isso responde sua pergunta? std :: remove_const com referências const
Evg
@ Eva Acho que faz um pouco, você está dizendo que eu deveria remover a referência primeiro, como referências não podem ser const?
darune
Exatidão. Em termos gerais, as referências não podem ser " const" ".
Evg 6/01

Respostas:

7

Há casos em que esses dois traços de tipo produzem resultados diferentes. Por exemplo, vamos considerar T = const int&.

  1. std::remove_cv_tremoverá o qualificador de cv de nível superior, transformando-o const int&em const int&, porque não há um qualificador de cv de nível superior. std::remove_reference_tretornará const int.

  2. No segundo caso, std::remove_reference_tretornará const inte std::remove_cv_to transformará em int.

Demonstração simples

Evg
fonte