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?


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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.