Namespaces
Variants

std:: is_literal_type

From cppreference.net
Metaprogramming library
Type traits
Type categories
(C++11)
(C++11) ( DR* )
Type properties
(C++11)
(C++11)
(C++14)
(C++11) (deprecated in C++26)
is_literal_type
(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_literal_type ;
(desde C++11)
(obsoleto en C++17)
(eliminado en C++20)

std::is_literal_type es un UnaryTypeTrait .

(Este rasgo de tipo ha sido obsoleto [1] y eliminado [2] por ofrecer un valor insignificante al código genérico.)

Si T satisface todos los requisitos de LiteralType , proporciona la constante miembro value igual a true . Para cualquier otro tipo, value es false .

Si std:: remove_all_extents_t < T > es un tipo incompleto y no es (posiblemente calificado con cv) void , el comportamiento es indefinido.

Si el programa añade especializaciones para std::is_literal_type o std::is_literal_type_v , el comportamiento no está definido.

Contenidos

Parámetros de plantilla

T - un tipo a verificar

Plantilla de variable auxiliar

template < class T >
constexpr bool is_literal_type_v = is_literal_type < T > :: value ;
(desde C++17)
(obsoleto)
(eliminado en C++20)

Heredado de std:: integral_constant

Constantes miembro

value
[static]
true si T es un tipo literal, 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

Solo los tipos literales pueden ser usados como parámetros o devueltos desde constexpr functions . Solo las clases literales pueden tener constexpr member functions.

Ejemplo

#include <type_traits>
struct A { int m; };
static_assert(std::is_literal_type_v<A> == true);
struct B { virtual ~B(); };
static_assert(std::is_literal_type_v<B> == false);
int main() {}

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares publicados anteriormente de C++.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 2015 C++11 T podría ser un array de tipo de clase
incompleto con límite desconocido
el comportamiento es
indefinido en este caso

Enlaces externos

  1. Alisdair Meredith. "Deprecar el Rasgo is_literal " . Desaprobando Partes Vestigiales de la Biblioteca en C++17 . "El rasgo de tipo is_literal ofrece un valor insignificante al código genérico, ya que lo que realmente se necesita es la capacidad de saber que una construcción específica produciría inicialización constante."
  2. Alisdair Meredith, Stephan T. Lavavej, Tomasz Kamiński. "Rasgos de tipo desaprobados" . Revisando Instalaciones Desaprobadas de C++17 para C++20 . " Recomendación fuerte: Eliminar los rasgos que pueden continuar como zombis. [...] Revisión de Toronto: Aceptar recomendación fuerte, eliminar de C++20."