std:: is_standard_layout
| Type traits | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Compile-time rational arithmetic | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Compile-time integer sequences | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
(C++14)
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Definiert im Header
<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, liefert die Konstante
value
den Wert
true
. Für jeden anderen Typ ist
value
false
.
Wenn std:: remove_all_extents_t < T > ein unvollständiger Typ ist und nicht (möglicherweise cv-qualifiziertes) void , 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.
Inhaltsverzeichnis |
Template-Parameter
| T | - | ein zu prüfender Typ |
Hilfsvariablen-Template
|
template
<
class
T
>
constexpr bool is_standard_layout_v = is_standard_layout < T > :: value ; |
(seit C++17) | |
Geerbt von std:: integral_constant
Member-Konstanten
|
value
[static]
|
true
wenn
T
ein Standard-Layout-Typ ist,
false
andernfalls
(öffentliche statische Member-Konstante) |
Member-Funktionen
|
operator bool
|
konvertiert das Objekt zu
bool
, gibt
value
zurück
(öffentliche Member-Funktion) |
|
operator()
(C++14)
|
gibt
value
zurück
(öffentliche Member-Funktion) |
Member-Typen
| Typ | Definition |
value_type
|
bool |
type
|
std:: integral_constant < bool , value > |
Hinweise
Ein Zeiger auf eine Standard-Layout-Klasse kann (mit reinterpret_cast ) in einen Zeiger auf sein erstes nicht-statisches Datenelement umgewandelt werden (siehe Empty Base Optimization ) und umgekehrt.
Wenn eine Standard-Layout-Union zwei oder mehr Standard-Layout-Structs enthält, ist es erlaubt, den gemeinsamen Anfangsteil von ihnen zu inspizieren.
Das Makro offsetof ist nur garantiert mit Standard-Layout-Klassen verwendbar.
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() {}
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrektes Verhalten |
|---|---|---|---|
| LWG 2015 | C++11 |
T
könnte ein Array von unvollständigem
Klassentyp mit unbekannter Grenze sein |
das Verhalten ist
in diesem Fall undefiniert |
Siehe auch
|
(C++11)
|
prüft, ob ein Typ trivial kopierbar ist
(Klassen-Template) |
|
(C++11)
(deprecated in C++20)
|
prüft, ob ein Typ ein Plain-Old-Data (POD) Typ ist
(Klassen-Template) |
|
Byte-Offset vom Anfang eines
Standard-Layout
Typs zum angegebenen Member
(Funktionsmakro) |