Espacios de nombres
Variantes
Acciones

std::integral_constant

De cppreference.com
< cpp‎ | types
 
 
Biblioteca de servicios
 
Apoyo de tipos
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
integral_constantbool_constanttrue_typefalse_type
(C++11)(C++17)(C++11)(C++11)
Metafunciones
(C++17)
Contexto de evaluación constante
Operaciones soportadas
Relaciones y consultas de propiedades
Modificaciones de tipos
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, T v >
struct integral_constant;
(desde C++11)

std::integral_constant envuelve una constante estática del tipo especificado. Es la clase base para los rasgos de tipo de C++.

El comportamiento de un programa que añade especializaciones para integral_constant no está definido.

Contenido

[editar]Plantillas auxiliares

Se define un alias de plantilla auxiliar std::bool_constant para el caso común donde T es bool.

template<bool B>
using bool_constant = integral_constant<bool, B>;
(desde C++17)

[editar]Especializaciones

Se proporcionan dos declaraciones typedef para el caso común donde T es bool:

Definido en el archivo de encabezado <type_traits>
Tipo Definición
true_typestd::integral_constant<bool, true>
false_typestd::integral_constant<bool, false>

[editar]Tipos miembro

Tipo Definición
value_typeT
typestd::integral_constant<T, v>

[editar]Constantes miembro

Nombre Valor
constexpr T value
[estático]
v
(constante miembro pública estática)

[editar]Funciones miembro

operator value_type
Devuelve el valor envuelto
(función miembro pública)[editar]
operator()
(C++14)
Devuelve el valor envuelto
(función miembro pública)[editar]

std::integral_constant::operator value_type

constexpr operator value_type()constnoexcept;

Función de conversión. Devuelve el valor envuelto.

std::integral_constant::operator()

constexpr value_type operator()()constnoexcept;
(desde C++14)

Devuelve el valor envuelto. Esta función habilita a std::integral_constant para que sirva como fuente de objetos función en tiempo de compilación.

[editar]Posible implementación

template<class T, T v>struct integral_constant {staticconstexpr T value = v;using value_type = T;using type = integral_constant;// usando el nombre de clase inyectadoconstexpr operator value_type()constnoexcept{return value;}constexpr value_type operator()()constnoexcept{return value;}// desde c++14};

[editar]Notas

Macro de prueba de característicaValorEstándarComentario
__cpp_lib_integral_constant_callable201304L(C++14)std::integral_constant::operator()
__cpp_lib_bool_constant201505L(C++17)std::bool_constant

[editar]Ejemplo

#include <type_traits>   using two_t = std::integral_constant<int, 2>;using four_t = std::integral_constant<int, 4>;   static_assert(not std::is_same_v<two_t, four_t>); static_assert(two_t::value*2== four_t::value, "2*2 != 4"); static_assert(two_t()<<1== four_t()>>0, "2*2 != 4");   enumclass E{ e1, e2 };using c1 = std::integral_constant<E, E::e1>;using c2 = std::integral_constant<E, E::e2>; static_assert(c1::value!= E::e2); static_assert(c1()== E::e1); static_assert(std::is_same_v<c2, c2>);   int main(){}


[editar]Véase también

Implementa una secuencia de enteros en tiempo de compilación.
(plantilla de clase)[editar]
close