std::is_implicit_lifetime
Von cppreference.com
| Definiert in der Kopfdatei <type_traits> |
||
| template< class T > struct is_implicit_lifetime; |
(seit C++23) | |
std::is_implicit_lifetime ist ein UnaryTypeTrait.
Wenn T ein implicit-lifetime Typ ist, stellt es das Mitgliedskonstante value gleich true bereit. Für jeden anderen Typ ist value false.
Das Verhalten ist undefiniert, wenn T ein unvollständiger Typ außer einem Array-Typ oder (möglicherweise cv-qualifiziertem) void ist.
Wenn das Programm Spezialisierungen für std::is_implicit_lifetime oder std::is_implicit_lifetime_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_implicit_lifetime_v = is_implicit_lifetime<T>::value; |
(seit C++23) | |
Abgeleitet von std::integral_constant
Member-Konstanten
| value [static] |
true, wenn T ein implicit-lifetime Typ ist, false andernfalls(ö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
| Feature-Test-Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_is_implicit_lifetime |
202302L |
(C++23) | std::is_implicit_lifetime
|
[edit] Beispiel
Führen Sie diesen Code aus
// The following types are collectively called implicit-lifetime types: // * scalar types: // * arithmetic types // * enumeration types // * pointer types // * pointer-to-member types // * std::nullptr_t // * implicit-lifetime class types // * is an aggregate whose destructor is not user-provided // * has at least one trivial eligible constructor and a trivial, // non-deleted destructor // * array types // * cv-qualified versions of these types. #include <type_traits> static_assert(std::is_implicit_lifetime_v<int>); // arithmetic type is a scalar type static_assert(std::is_implicit_lifetime_v<const int>); // cv-qualified a scalar type enum E { e }; static_assert(std::is_implicit_lifetime_v<E>); // enumeration type is a scalar type static_assert(std::is_implicit_lifetime_v<int*>); // pointer type is a scalar type static_assert(std::is_implicit_lifetime_v<std::nullptr_t>); // scalar type struct S { int x, y; }; // S is an implicit-lifetime class: an aggregate without user-provided destructor static_assert(std::is_implicit_lifetime_v<S>); static_assert(std::is_implicit_lifetime_v<int S::*>); // pointer-to-member struct X { ~X() = delete; }; // X is not implicit-lifetime class due to deleted destructor static_assert(!std::is_implicit_lifetime_v<X>); static_assert(std::is_implicit_lifetime_v<int[8]>); // array type static_assert(std::is_implicit_lifetime_v<volatile int[8]>); // cv-qualified array type int main() {}
[edit] Siehe auch
| (C++11) |
prüft, ob ein Typ ein Skalartyp ist (Klassenvorlage) |
| (C++11) |
prüft, ob ein Typ ein Arraytyp ist (Klassenvorlage) |
| (C++17) |
prüft, ob ein Typ ein Aggregattyp ist (Klassenvorlage) |
| erstellt implizit Objekte in gegebenem Speicher, wobei die Objekt-Repräsentation wiederverwendet wird (Funktions-Template) |