Namensräume
Varianten
Aktionen

std::is_standard_layout

Von cppreference.com
< cpp‎ | types
 
 
Metaprogrammierungsbibliothek
Typmerkmale
Typkategorien
(C++11)
(C++11)(DR*)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11) 
(C++11)
(C++11)
Typeneigenschaften
(C++11)
(C++11)
(C++14)
(C++11)(deprecated in C++26)
is_standard_layout
(C++11)
(C++11)(bis C++20*)
(C++11)(veraltet in C++20)
(C++11)
Typmerkmalskonstanten
Metafunktionen
(C++17)
Unterstützte Operationen
Beziehungen und Eigenschaftsabfragen
Typmodifikationen
(C++11)(C++11)(C++11)
Typentransformationen
(C++11)(veraltet in C++23)
(C++11)(veraltet in C++23)
(C++11)
(C++11)(bis C++20*)(C++17)

(C++11)
(C++11)
(C++17)
Rationale Arithmetik zur Compilezeit
Ganzzahlsequenzen zur Compilezeit
 
Definiert in der Kopfdatei <type_traits>
template< class T >
struct is_standard_layout;
(seit C++11)

std::is_standard_layout ist ein UnaryTypeTrait.

Wenn T ein Standard-Layout-Typ ist, stellt es die Member-Konstante value mit dem Wert true bereit. Für jeden anderen Typ ist value false.

Wenn std::remove_all_extents_t<T> ein unvollständiger Typ und nicht (möglicherweise cv-qualifiziertes) void ist, ist das Verhalten undefiniert.

Wenn das Programm Spezialisierungen für std::is_standard_layout oder std::is_standard_layout_v hinzufügt, ist das Verhalten undefiniert.

Inhalt

[bearbeiten] Template-Parameter

T - ein zu prüfender Typ

[bearbeiten] Hilfsvariablen-Template

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

Abgeleitet von std::integral_constant

Member-Konstanten

value
[static]
true, wenn T ein Standard-Layout-Typ ist, andernfalls false
(öffentliche statische Member-Konstante)

Memberfunktionen

operator bool
konvertiert das Objekt zu bool, gibt value zurück
(öffentliche Memberfunktion)
operator()
(C++14)
gibt value zurück
(öffentliche Memberfunktion)

Membertypen

Typ Definition
value_type bool
type std::integral_constant<bool, value>

[edit] Anmerkungen

Ein Zeiger auf eine Standard-Layout-Klasse darf (mit reinterpret_cast) in einen Zeiger auf ihr erstes nicht-statisches Datenmitglied und umgekehrt konvertiert werden.

Wenn eine Standard-Layout-Union zwei oder mehr Standard-Layout-Strukturen enthält, ist es gestattet, deren gemeinsamen Anfangsteil zu inspizieren.

Das Makro offsetof ist nur garantiert mit Standard-Layout-Klassen verwendbar.

[edit] Beispiel

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

[edit] Fehlerberichte

Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR angewendet auf Verhalten wie veröffentlicht Korrigiertes Verhalten
LWG 2015 C++11 T könnte ein Array eines unvollständigen
Klassentyps mit unbekannter Größe sein
Das Verhalten ist
in diesem Fall nicht definiert.

[edit] Siehe auch

prüft, ob ein Typ trivial kopierbar ist
(Klassenvorlage) [bearbeiten]
(C++11)(veraltet in C++20)
prüft, ob ein Typ ein Plain-Old-Data (POD)-Typ ist
(Klassenvorlage) [bearbeiten]
Byte-Offset vom Anfang eines Standardlayout-Typs zu einem angegebenen Mitglied
(function macro) [bearbeiten]