std:: is_implicit_lifetime
|
Definido en el encabezado
<type_traits>
|
||
|
template
<
class
T
>
struct is_implicit_lifetime ; |
(desde C++23) | |
std::is_implicit_lifetime
es un
UnaryTypeTrait
.
Si
T
es un
tipo de duración implícita
, proporciona la constante miembro
value
igual a
true
. Para cualquier otro tipo,
value
es
false
.
El comportamiento es indefinido si T es un tipo incompleto que no sea un tipo array o (posiblemente calificado-cv) void .
Si el programa añade especializaciones para
std::is_implicit_lifetime
o
std::is_implicit_lifetime_v
, el comportamiento es indefinido.
Contenidos |
Parámetros de plantilla
| T | - | un tipo a verificar |
Plantilla de variable auxiliar
|
template
<
class
T
>
constexpr bool is_implicit_lifetime_v = is_implicit_lifetime < T > :: value ; |
(desde C++23) | |
Heredado de std:: integral_constant
Constantes miembro
|
value
[static]
|
true
si
T
es un tipo de duración implícita,
false
en caso contrario
(constante miembro pública estática) |
Funciones miembro
|
operator bool
|
convierte el objeto a
bool
, devuelve
value
(función miembro pública) |
|
operator()
(C++14)
|
devuelve
value
(función miembro pública) |
Tipos miembro
| Tipo | Definición |
value_type
|
bool |
type
|
std:: integral_constant < bool , value > |
Notas
| Macro de prueba de características | Valor | Estándar | Característica |
|---|---|---|---|
__cpp_lib_is_implicit_lifetime
|
202302L
|
(C++23) |
std::is_implicit_lifetime
|
Ejemplo
// Los siguientes tipos se denominan colectivamente tipos de duración implícita: // * tipos escalares: // * tipos aritméticos // * tipos de enumeración // * tipos de puntero // * tipos de puntero-a-miembro // * std::nullptr_t // * tipos de clase de duración implícita // * es un agregado cuyo destructor no es proporcionado por el usuario // * tiene al menos un constructor elegible trivial y un destructor // trivial y no eliminado // * tipos de arreglo // * versiones calificadas cv de estos tipos. #include <type_traits> static_assert(std::is_implicit_lifetime_v<int>); // el tipo aritmético es un tipo escalar static_assert(std::is_implicit_lifetime_v<const int>); // tipo escalar calificado cv enum E { e }; static_assert(std::is_implicit_lifetime_v<E>); // el tipo de enumeración es un tipo escalar static_assert(std::is_implicit_lifetime_v<int*>); // el tipo de puntero es un tipo escalar static_assert(std::is_implicit_lifetime_v<std::nullptr_t>); // tipo escalar struct S { int x, y; }; // S es una clase de duración implícita: un agregado sin destructor proporcionado por el usuario static_assert(std::is_implicit_lifetime_v<S>); static_assert(std::is_implicit_lifetime_v<int S::*>); // puntero-a-miembro struct X { ~X() = delete; }; // X no es una clase de duración implícita debido al destructor eliminado static_assert(!std::is_implicit_lifetime_v<X>); static_assert(std::is_implicit_lifetime_v<int[8]>); // tipo de arreglo static_assert(std::is_implicit_lifetime_v<volatile int[8]>); // tipo de arreglo calificado cv int main() {}
Véase también
|
(C++11)
|
comprueba si un tipo es un tipo escalar
(plantilla de clase) |
|
(C++11)
|
comprueba si un tipo es un tipo array
(plantilla de clase) |
|
(C++17)
|
comprueba si un tipo es un tipo agregado
(plantilla de clase) |
|
crea objetos implícitamente en el almacenamiento dado reutilizando la representación del objeto
(plantilla de función) |