Namespaces
Variants

std:: is_implicit_lifetime

From cppreference.net
Metaprogramming library
Type traits
Type categories
(C++11)
(C++11) ( DR* )
Type properties
(C++11)
(C++11)
(C++14)
is_implicit_lifetime
(C++23)
(C++11) (deprecated in C++26)
(C++11) ( until C++20* )
(C++11) (deprecated in C++20)
(C++11)
Type trait constants
Metafunctions
(C++17)
Supported operations
Relationships and property queries
Type modifications
Type transformations
(C++11) (deprecated in C++23)
(C++11) (deprecated in C++23)
(C++11)
(C++11) ( until C++20* ) (C++17)

Compile-time rational arithmetic
Compile-time integer sequences
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)
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)