<type_traits>

Define las plantillas para las constantes en tiempo de compilación que aportan información sobre las propiedades de sus argumentos de tipo o crean tipos transformados.

Sintaxis

#include <type_traits>

Comentarios

Las clases y las plantillas de <type_traits> se usan para admitir la inferencia, clasificación y transformación de tipos en tiempo de compilación. También se usan para detectar errores relacionados con los tipos y para ayudarle a optimizar el código genérico. Los atributos del tipo unario describen una propiedad de un tipo, los atributos de tipo binario describen la relación entre los tipos y los atributos de transformación que modifican una propiedad de un tipo.

La clase asistente integral_constant y sus especializaciones de plantilla true_type y false_type forman la clase base para los predicados de tipo. Un predicado de tipo es una plantilla que toma uno o más argumentos de tipo. Cuando un predicado de tipo es true, se deriva públicamente (ya sea de forma directa o indirecta) de true_type. Cuando un predicado de tipo es false, se deriva públicamente (ya sea de forma directa o indirecta) de false_type.

Un modificador de tipo o rasgo de transformación es una plantilla que toma uno o más argumentos de plantilla y tiene un miembro type, que es un sinónimo del tipo modificado.

Plantillas de alias

Para simplificar las expresiones de los atributos de tipo, se proporcionan plantillas de alias para typename some_trait<T>::type, donde some_trait es el nombre de clase de la plantilla. Por ejemplo, add_const tiene la plantilla de alias para su tipo add_const_t definida así:

template <class T>
using add_const_t = typename add_const<T>::type;

Estos son los alias proporcionados para los miembros type:

add_const_t
add_cv_t
add_lvalue_reference_t
add_pointer_t
add_rvalue_reference_t
add_volatile_t
aligned_storage_t
aligned_union_t\

common_type_t
conditional_t
decay_t
enable_if_t
invoke_result_t
make_signed_t
make_unsigned_t
remove_all_extents_t\

remove_const_t
remove_cv_t
remove_extent_t
remove_pointer_t
remove_reference_t
remove_volatile_t
result_of_t
underlying_type_t\

Clases

Definiciones de tipos y clase del asistente

Nombre Descripción
integral_constant Crea una constante entera a partir de un tipo y un valor.
true_type Contiene la constante integral con valor true.
false_type Contiene la constante integral con valor false.

Categorías de tipo principal

Nombre Descripción
is_void Comprueba si el tipo es void.
is_null_pointer Comprueba si el tipo es std::nullptr_t.
is_integral Comprueba si el tipo es integral.
is_floating_point Comprueba si el tipo es un punto flotante.
is_array Comprueba si el tipo es una matriz.
is_pointer Comprueba si el tipo es un puntero.
is_lvalue_reference Comprueba si el tipo es una referencia a un valor L.
is_rvalue_reference Comprueba si el tipo es una referencia a un valor R.
is_member_object_pointer Comprueba si el tipo es un puntero a un objeto miembro.
is_member_function_pointer Comprueba si el tipo es un puntero a una función miembro.
is_enum Comprueba si el tipo es una enumeración.
is_union Comprueba si el tipo es una unión.
is_class Comprueba si el tipo es una clase.
is_function Comprueba si el tipo es un tipo de función.

Categorías de tipo compuesto

Nombre Descripción
is_reference Comprueba si el tipo es una referencia.
is_arithmetic Comprueba si el tipo es aritmético.
is_fundamental Comprueba si el tipo es void o aritmético.
is_object Comprueba si el tipo es un tipo de objeto.
is_scalar Comprueba si el tipo es escalar.
is_compound Comprueba si el tipo no es escalar.
is_member_pointer Comprueba si el tipo es un puntero a un miembro.

Propiedades de tipo

Nombre Descripción
is_const Comprueba si el tipo es const.
is_volatile Comprueba si el tipo es volatile.
is_trivial Comprueba si el tipo es trivial.
is_trivially_copyable Comprueba si el tipo se puede copiar de manera trivial.
is_standard_layout Comprueba si el tipo es un tipo de diseño estándar.
is_pod Comprueba si el tipo es POD.
is_literal_type Comprueba si el tipo puede ser una variable constexpr o se puede usar en una función constexpr.
is_empty Comprueba si el tipo es una clase vacía.
is_polymorphic Comprueba si el tipo es una clase polimórfica.
is_abstract Comprueba si el tipo es una clase abstracta.
is_final Comprueba si el tipo es un tipo de clase marcado como final.
is_aggregate
is_signed Comprueba si el tipo es un entero con signo.
is_unsigned Comprueba si el tipo es un entero sin signo.
is_constructible Comprueba si el tipo se puede construir con los tipos de argumento especificados.
is_default_constructible Comprueba si el tipo tiene un constructor predeterminado.
is_copy_constructible Comprueba si el tipo tiene un constructor de copia.
is_move_constructible Comprueba si el tipo tiene un constructor de movimiento.
is_assignable Comprueba si al primer tipo puede asignarse un valor del segundo tipo.
is_copy_assignable Comprueba si a un tipo puede asignarse un valor de referencia constante del tipo.
is_move_assignable Comprueba si a un tipo puede asignarse un valor de referencia R del tipo.
is_swappable
is_swappable_with
is_destructible Comprueba si el tipo se puede destruir.
is_trivially_constructible Comprueba si el tipo no usa ninguna operación no trivial cuando se construye usando los tipos especificados.
is_trivially_default_constructible Comprueba si el tipo no usa ninguna operación no trivial cuando se construye de manera predeterminada.
is_trivially_copy_constructible Comprueba si el tipo no usa ninguna operación no trivial cuando se aplica el constructor de copias.
is_trivially_move_constructible Comprueba si el tipo no usa ninguna operación no trivial cuando se aplica el constructor de movimiento.
is_trivially_assignable Comprueba si los tipos se pueden asignar y la asignación no usa ninguna operación no trivial.
is_trivially_copy_assignable Comprueba si el tipo se puede asignar mediante copia y la asignación no usa ninguna operación no trivial.
is_trivially_move_assignable Comprueba si el tipo se puede asignar mediante movimiento y la asignación no usa ninguna operación no trivial.
is_trivially_destructible Comprueba si se puede destruir el tipo y el destructor no usa ninguna operación no trivial.
is_nothrow_constructible Comprueba si el tipo se puede construir y se sabe que no se inicia cuando se construye usando los tipos especificados.
is_nothrow_default_constructible Comprueba si el tipo se puede construir de forma predeterminada y se sabe que no se inicia cuando se construye de forma predeterminada.
is_nothrow_copy_constructible Comprueba si el tipo se puede construir mediante copia y se sabe que el constructor de copias no se inicia.
is_nothrow_move_constructible Comprueba si el tipo se puede construir mediante movimiento y se sabe que el constructor de movimiento no se inicia.
is_nothrow_assignable Comprueba si el tipo se puede asignar mediante el tipo especificado y se sabe que la asignación no se inicia.
is_nothrow_copy_assignable Comprueba si el tipo se puede construir mediante copia y se sabe que la asignación no se inicia.
is_nothrow_move_assignable Comprueba si el tipo se puede asignar mediante movimiento y se sabe que la asignación no se inicia.
is_nothrow_swappable
is_nothrow_swappable_with
is_nothrow_destructible Comprueba si el tipo se puede destruir y se sabe que el destructor no se inicia.
has_virtual_destructor Comprueba si el tipo tiene un destructor virtual.
has_unique_object_representations
is_invocable Comprueba si se puede invocar un tipo al que se puede llamar mediante los tipos de argumentos especificados.
Se incluyó en C++17.
is_invocable_r Comprueba si se puede invocar un tipo al que se puede llamar mediante los tipos de argumentos especificados y el resultado se pueda convertir al tipo especificado.
Se incluyó en C++17.
is_nothrow_invocable Comprueba si se puede invocar un tipo al que se puede llamar mediante los tipos de argumentos especificados y se sabe que no inicia excepciones.
Se incluyó en C++17.
is_nothrow_invocable_r Comprueba si se puede invocar un tipo al que se puede llamar mediante los tipos de argumentos especificados y se sabe que no inicia excepciones, y el resultado se pueda convertir al tipo especificado.
Se incluyó en C++17.

Consultas de propiedad de tipo

Nombre Descripción
alignment_of Obtiene la alineación de un tipo.
rank Obtiene el número de dimensiones de matriz.
extent Obtiene el número de elementos de la dimensión de la matriz especificada.

Relaciones de tipos

Nombre Descripción
is_same Comprueba si dos tipos son iguales.
is_base_of Comprueba si un tipo es la base de otro.
is_convertible Comprueba si un tipo es convertible en otro.

Modificaciones de const y volatile

Nombre Descripción
add_const Genera un tipo const a partir del tipo.
add_volatile Genera un tipo volatile a partir del tipo.
add_cv Genera un tipo const volatile a partir del tipo.
remove_const Genera un tipo no constante a partir del tipo.
remove_volatile Genera un tipo no volátil a partir del tipo.
remove_cv Genera un tipo no constante y no volátil a partir del tipo.

Modificaciones de referencia

Nombre Descripción
add_lvalue_reference Genera una referencia al tipo a partir del tipo.
add_rvalue_reference Genera una referencia de valor R al tipo a partir del tipo.
remove_reference Genera un tipo sin referencia a partir del tipo.

Modificaciones de signo

Nombre Descripción
make_signed Genera el tipo si tiene signo o el tipo con signo más pequeño igual o superior en tamaño al tipo.
make_unsigned Genera el tipo si no tiene signo o el tipo con signo más pequeño igual o superior en tamaño al tipo.

Modificaciones de matriz

Nombre Descripción
remove_all_extents Genera un tipo que no es de matriz a partir de un tipo de matriz.
remove_extent Genera el tipo de elemento a partir de un tipo de matriz.

Modificaciones de puntero

Nombre Descripción
add_pointer Genera un puntero al tipo a partir del tipo.
remove_pointer Genera un tipo a partir de un puntero al tipo.

Otras transformaciones

Nombre Descripción
aligned_storage Asigna memoria sin inicializar para un tipo alineado.
aligned_union Asigna memoria sin inicializar para una unión alineada con un destructor o un constructor no trivial.
common_type Genera el tipo común de todos los tipos del paquete de parámetros.
conditional Si la condición es true, genera el primer tipo especificado, de lo contrario, el segundo tipo especificado.
decay Genera el tipo tal y como se pasa por valor. Crea un tipo que no es de referencia, const o volatile, o bien convierte un puntero al tipo.
enable_if Si la condición es true, genera el tipo especificado, de lo contrario, no genera ningún tipo.
invoke_result Determina el tipo de valor devuelto del tipo que se puede llamar que toma los tipos de argumento especificados.
Se incluyó en C++17.
result_of Determina el tipo de valor devuelto del tipo que se puede llamar que toma los tipos de argumento especificados.
Incluido en C++14, en desuso en C++17.
underlying_type Genera el tipo entero subyacente para un tipo de enumeración.

Atributos del operador lógico

Nombre Descripción
Conjunto
Separación
negación

Consulte también

<functional>