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?
c++
c++17
typetraits
darune
fonte
fonte
const int&
. Você deve entrarconst int
no primeiro caso eint
no segundo.const
" ".Respostas:
Há casos em que esses dois traços de tipo produzem resultados diferentes. Por exemplo, vamos considerar
T = const int&
.std::remove_cv_t
removerá o qualificador de cv de nível superior, transformando-oconst int&
emconst int&
, porque não há um qualificador de cv de nível superior.std::remove_reference_t
retornaráconst int
.No segundo caso,
std::remove_reference_t
retornaráconst int
estd::remove_cv_t
o transformará emint
.Demonstração simples
fonte