Espacios de nombres
Variantes
Acciones

std::remove_cv, std::remove_const, std::remove_volatile

De cppreference.com
< cpp‎ | types
 
 
Biblioteca de servicios
 
Apoyo de tipos
Tipos básicos
Tipos fundamentales
Tipos enteros de anchura fija (C++11)
Límites numéricos
Interfaz de C de límites numéricos
Información de tipo
en tiempo de ejecución
Rasgos de tipos
Categorías de tipos
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
Propiedades de tipos
(C++11)
(C++11)
(C++14)
(C++11)
(C++11)(hasta C++20)
(C++11)(en desuso en C++20)
(C++11)
Constantes de rasgos de tipos
Metafunciones
(C++17)
Contexto de evaluación constante
Operaciones soportadas
Relaciones y consultas de propiedades
Modificaciones de tipos
remove_cvremove_constremove_volatile
(C++11)(C++11)(C++11)
(C++11)(C++11)(C++11)
Transformaciones de tipos
(C++11)
(C++11)
(C++17)
(C++11)(hasta C++20)(C++17)
 
Definido en el archivo de encabezado <type_traits>
template< class T >
struct remove_cv;
(1) (desde C++11)
template< class T >
struct remove_const;
(2) (desde C++11)
template< class T >
struct remove_volatile;
(3) (desde C++11)

Proporciona la definición de tipo (typedef) miembro type que es igual a T, excepto que los calificadores-cv de nivel superior están eliminados.

1) Elimina el calificador const de nivel superior, o el calificador volatile de nivel superior, o ambos, si están presentes.
2) Elimina el calificador const de nivel superior.
3) Elimina el calificador volatile de nivel superior.

El comportamiento de un programa que añade especializaciones para cualquiera de las plantillas definidas en esta página no está definido.

Contenido

[editar] Tipos miembro

Nombre Definición
type El tipo T sin el calificador-cv.

[editar] Tipos auxiliares

template< class T >
using remove_cv_t       = typename remove_cv<T>::type;
(desde C++14)
template< class T >
using remove_const_t    = typename remove_const<T>::type;
(desde C++14)
template< class T >
using remove_volatile_t = typename remove_volatile<T>::type;
(desde C++14)

[editar] Posible implementación

template< class T > struct remove_cv                   { typedef T type; };
template< class T > struct remove_cv<const T>          { typedef T type; };
template< class T > struct remove_cv<volatile T>       { typedef T type; };
template< class T > struct remove_cv<const volatile T> { typedef T type; };
 
template< class T > struct remove_const                { typedef T type; };
template< class T > struct remove_const<const T>       { typedef T type; };
 
template< class T > struct remove_volatile             { typedef T type; };
template< class T > struct remove_volatile<volatile T> { typedef T type; };

[editar] Ejemplo

La eliminación de const/volatile de const volatile int * no modifica el tipo, ya que el puntero mismo no es ni const ni volatile.

#include <iostream>
#include <type_traits>
 
int main() {
    typedef std::remove_cv<const int>::type type1;
    typedef std::remove_cv<volatile int>::type type2;
    typedef std::remove_cv<const volatile int>::type type3;
    typedef std::remove_cv<const volatile int*>::type type4;
    typedef std::remove_cv<int * const volatile>::type type5;
 
    std::cout << "prueba1 " << (std::is_same<int, type1>::value
        ? "pasa" : "falla") << '\n';
    std::cout << "prueba2 " << (std::is_same<int, type2>::value
        ? "pasa" : "falla") << '\n';
    std::cout << "prueba3 " << (std::is_same<int, type3>::value
        ? "pasa" : "falla") << '\n';
    std::cout << "prueba4 " << (std::is_same<const volatile int*, type4>::value
        ? "pasa" : "falla") << '\n';
    std::cout << "prueba5 " << (std::is_same<int*, type5>::value
        ? "pasa" : "falla") << '\n';
}

Salida:

prueba1 pasa
prueba2 pasa
prueba3 pasa
prueba4 pasa
prueba5 pasa

[editar] Véase también

(C++11)
Comprueba si un tipo está calificado con el calificador const
(plantilla de clase) [editar]
Comprueba si un tipo está calificado con el calificador volatile
(plantilla de clase) [editar]
(C++11)(C++11)(C++11)
Agrega los especificadores const y/o volatile al tipo dado
(plantilla de clase) [editar]
Combina std::remove_cv y std::remove_reference.
(plantilla de clase) [editar]