Namespaces
Variants

std::meta::is_complete_type

Von de.cppreference.net
< cpp | meta
 
 
 
Reflexionsbibliothek
 
Reflexionstypen und -abfragen
Reflexionsabfragen
Reflexionslayoutabfragen
Typeigenschaften
Typeigenschaftsabfragen
 
Definiert in Header <meta>
consteval bool is_complete_type( std::meta::info r );
(seit C++26)

Stellt fest, ob die Reflexion r einen vollständigen Typ darstellt.

Formal gibt true zurück, wenn std::meta::is_type(r) true ist und es einen Punkt im Auswertungskontext gibt, von dem aus der von std::meta::dealias(r) dargestellte Typ kein unvollständiger Typ ist. Andernfalls gibt false zurück.

Parameter

r - eine zu untersuchende Reflexion

Rückgabewert

true wenn r einen vollständigen Typ darstellt, false andernfalls

Anmerkungen

Ein Aufzählungstyp ist vollständig, wenn sein zugrunde liegender Typ bekannt ist. Um zu überprüfen, ob seine Liste der Enumeratoren vollständig definiert ist, siehe std::meta::is_enumerable_type.

enum E : int;
static_assert(std::meta::is_complete_type(^^E));
static_assert(!std::meta::is_enumerable_type(^^E));

enum E : int { e };
static_assert(std::meta::is_enumerable_type(^^E));

Beispiel

#include <meta>

struct A;    // incomplete type
struct B {}; // complete type

static_assert(std::meta::is_complete_type(^^A) == false);
static_assert(std::meta::is_complete_type(^^B) == true);

template <typename>
struct C; // incomplete class template

template <>
struct C<int> {}; // complete explicit template specialization

template <>
struct C<long>; // incomplete explicit template specialization

static_assert(std::meta::is_complete_type(^^C<long>) == false);
static_assert(std::meta::is_complete_type(^^C<char>) == false);
static_assert(std::meta::is_complete_type(^^C<int>) == true);

int main() {}

Siehe auch

(C++26)
prüft, ob Reflexion einen Typ darstellt
(Funktion)