Espacios de nombres
Variantes
Acciones

std::is_layout_compatible

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
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, class U >
struct is_layout_compatible;
(desde C++20)

Si T y U son tipos de diseño compatible proporciona la constante miembro value igual a true. De lo contrario, value es false.

Todo tipo es de diseño compatible con sus versiones calificadas-cv, incluso si no es un tipo objeto.

T y U deberá cada uno ser un tipo completo, (posiblemente calificado-cv) void, o un array de límite desconocido. De lo contrario, el comportamiento está indefinido.

Si la instanciación de una plantilla anterior depende, directa o indirectamente, de un tipo incompleto, y esa instanciación podría generar un resultado distinto si ese tipo hipotéticamente se completara, el comportamiento está indefinido.

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

Contenido

[editar]Plantilla de variable auxiliar

template<class T, class U >
inlineconstexprbool is_layout_compatible_v = is_layout_compatible<T, U>::value;
(desde C++20)

Heredado de std::integral_constant

Constantes miembro

value
[estático]
true si T y U son de diseño compatible, de lo contrario false.
(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_typebool
typestd::integral_constant<bool, value>

[editar]Notas

Un tipo entero con signo y su contraparte sin signo no son de diseño compatible. char no es de diseño compatible ni con signedchar ni unsignedchar.

Tipos similares no son de diseño compatible si no son el mismo tipo después de ignorar los calificadores-cv de nivel superior.

Un tipo enumeración y su tipo subyacente no son de diseño compatible.

Tipos array de diseño compatible pero de distintos tipos de elementos (ignorando los calificadores-cv) no son de diseño compatible, incluso si tienen la misma longitud.

[editar]Ejemplo

#include <type_traits>#include <iostream>   struct Foo {int x;char y;};   class Bar {constint u =42;volatilechar v ='*';};   enum E0 :int{};enumclass E1 :int{};   int main(){std::cout<<std::boolalpha<< std::is_layout_compatible_v<constvoid, volatilevoid><<'\n'<< std::is_layout_compatible_v<Foo, Bar><<'\n'<< std::is_layout_compatible_v<Foo[2], Bar[2]><<'\n'<< std::is_layout_compatible_v<int, E0><<'\n'<< std::is_layout_compatible_v<E0, E1><<'\n'<< std::is_layout_compatible_v<long, unsignedlong><<'\n'<< std::is_layout_compatible_v<char*, constchar*><<'\n'<< std::is_layout_compatible_v<char*, char*const><<'\n';}

Salida:

true true false false true false false true

[editar]Véase también

Comprueba si un tipo es un tipo de diseño estándar.
(plantilla de clase)[editar]
close