std:: is_implicit_lifetime
|
Definiert im Header
<type_traits>
|
||
|
template
<
class
T
>
struct is_implicit_lifetime ; |
(seit C++23) | |
std::is_implicit_lifetime
ist ein
UnaryTypeTrait
.
Falls
T
ein
Implicit-Lifetime-Typ
ist, liefert die Member-Konstante
value
den Wert
true
. Für jeden anderen Typ ist
value
false
.
Das Verhalten ist undefiniert, falls T ein unvollständiger Typ ist, außer ein Array-Typ oder (möglicherweise cv-qualifiziert) void .
Wenn das Programm Spezialisierungen für
std::is_implicit_lifetime
oder
std::is_implicit_lifetime_v
hinzufügt, ist das Verhalten undefiniert.
Inhaltsverzeichnis |
Template-Parameter
| T | - | ein zu prüfender Typ |
Hilfsvariablen-Template
|
template
<
class
T
>
constexpr bool is_implicit_lifetime_v = is_implicit_lifetime < T > :: value ; |
(seit C++23) | |
Geerbt von std:: integral_constant
Member-Konstanten
|
value
[static]
|
true
wenn
T
ein Implicit-Lifetime-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
| Feature-Test Makro | Wert | Standard | Funktion |
|---|---|---|---|
__cpp_lib_is_implicit_lifetime
|
202302L
|
(C++23) |
std::is_implicit_lifetime
|
Beispiel
// Die folgenden Typen werden zusammen als implizite-Lebensdauer-Typen bezeichnet: // * Skalartypen: // * arithmetische Typen // * Aufzählungstypen // * Zeigertypen // * Zeiger-auf-Mitglied-Typen // * std::nullptr_t // * implizite-Lebensdauer-Klassentypen // * ist ein Aggregat, dessen Destruktor nicht benutzerbereitgestellt ist // * hat mindestens einen trivialen geeigneten Konstruktor und einen trivialen, // nicht gelöschten Destruktor // * Arraytypen // * CV-qualifizierte Versionen dieser Typen. #include <type_traits> static_assert(std::is_implicit_lifetime_v<int>); // Arithmetischer Typ ist ein Skalartyp static_assert(std::is_implicit_lifetime_v<const int>); // CV-qualifizierter Skalartyp enum E { e }; static_assert(std::is_implicit_lifetime_v<E>); // Aufzählungstyp ist ein Skalartyp static_assert(std::is_implicit_lifetime_v<int*>); // Zeigertyp ist ein Skalartyp static_assert(std::is_implicit_lifetime_v<std::nullptr_t>); // Skalartyp struct S { int x, y; }; // S ist ein impliziter-Lebensdauer-Klassentyp: Ein Aggregat ohne benutzerbereitgestellten Destruktor static_assert(std::is_implicit_lifetime_v<S>); static_assert(std::is_implicit_lifetime_v<int S::*>); // Zeiger-auf-Mitglied struct X { ~X() = delete; }; // X ist kein impliziter-Lebensdauer-Klassentyp aufgrund des gelöschten Destruktors static_assert(!std::is_implicit_lifetime_v<X>); static_assert(std::is_implicit_lifetime_v<int[8]>); // Arraytyp static_assert(std::is_implicit_lifetime_v<volatile int[8]>); // CV-qualifizierter Arraytyp int main() {}
Siehe auch
|
(C++11)
|
prüft, ob ein Typ ein Skalartyp ist
(Klassentemplate) |
|
(C++11)
|
prüft, ob ein Typ ein Arraytyp ist
(Klassentemplate) |
|
(C++17)
|
prüft, ob ein Typ ein Aggregattyp ist
(Klassentemplate) |
|
erstellt implizit Objekte im angegebenen Speicher mit wiederverwendeter Objektrepräsentation
(Funktionstemplate) |