Namespaces
Variants

std:: is_standard_layout

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_standard_layout
(C++11)
(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_standard_layout ;
(desde C++11)

std::is_standard_layout es un UnaryTypeTrait .

Si T es un tipo de diseño estándar , 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_standard_layout o std::is_standard_layout_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_standard_layout_v = is_standard_layout < T > :: value ;
(desde C++17)

Heredado de std:: integral_constant

Constantes miembro

value
[static]
true si T es un tipo de diseño estándar, 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

Un puntero a una clase de diseño estándar puede convertirse (con reinterpret_cast ) a un puntero a su primer miembro de datos no estático (ver optimización de base vacía ) y viceversa.

Si una unión de diseño estándar contiene dos o más estructuras de diseño estándar, se permite inspeccionar la parte inicial común de ellas.

La macro offsetof solo está garantizada para ser utilizable con clases de diseño estándar.

Ejemplo

#include <type_traits>
struct A { int m; };
static_assert(std::is_standard_layout_v<A> == true);
class B: public A { int m; };
static_assert(std::is_standard_layout_v<B> == false);
struct C { virtual void foo(); };
static_assert(std::is_standard_layout_v<C> == false);
int main() {}

Informes de defectos

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

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

Véase también

verifica si un tipo es trivialmente copiable
(plantilla de clase)
(C++11) (obsoleto en C++20)
verifica si un tipo es un tipo de datos simple (POD)
(plantilla de clase)
desplazamiento en bytes desde el inicio de un tipo de diseño estándar hasta el miembro especificado
(macro de función)