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
Défini dans l'en-tête <type_traits>
template < class T >
struct is_standard_layout ;
(depuis C++11)

std::is_standard_layout est un UnaryTypeTrait .

Si T est un type à disposition standard , fournit la constante membre value égale à true . Pour tout autre type, value est false .

Si std:: remove_all_extents_t < T > est un type incomplet et n'est pas (éventuellement qualifié cv) void , le comportement est indéfini.

Si le programme ajoute des spécialisations pour std::is_standard_layout ou std::is_standard_layout_v , le comportement est indéfini.

Table des matières

Paramètres du modèle

T - un type à vérifier

Modèle de variable d'assistance

template < class T >
constexpr bool is_standard_layout_v = is_standard_layout < T > :: value ;
(depuis C++17)

Hérité de std:: integral_constant

Constantes membres

value
[static]
true si T est un type à disposition standard, false sinon
(constante membre publique statique)

Fonctions membres

operator bool
convertit l'objet en bool , retourne value
(fonction membre publique)
operator()
(C++14)
retourne value
(fonction membre publique)

Types membres

Type Définition
value_type bool
type std:: integral_constant < bool , value >

Notes

Un pointeur vers une classe standard-layout peut être converti (avec reinterpret_cast ) en un pointeur vers son premier membre de données non statique (voir optimisation de base vide ) et vice versa.

Si une union standard-layout contient deux structures ou plus de type standard-layout, il est permis d'inspecter la partie initiale commune de celles-ci.

La macro offsetof est uniquement garantie d'être utilisable avec des classes standard-layout.

Exemple

#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() {}

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Applicable à Comportement publié Comportement correct
LWG 2015 C++11 T pouvait être un tableau de type
classe incomplet avec limite inconnue
le comportement est
indéfini dans ce cas

Voir aussi

vérifie si un type est trivialement copiable
(modèle de classe)
(C++11) (obsolète en C++20)
vérifie si un type est un type de données ancien simple (POD)
(modèle de classe)
décalage en octets depuis le début d'un type à disposition standard jusqu'au membre spécifié
(macro de fonction)