Namespaces
Variants

std::meta::has_identifier

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

Bestimmt, ob das, was r darstellt, einen zugehörigen Bezeichner (einschließlich eines Literal-Suffix-Bezeichners) hat.

Formell:

  • Wenn r eine Entität mit einem typedef-Namen für Verknüpfungszwecke darstellt, wird true zurückgegeben.
  • Andernfalls, wenn r eine unbenannte Klasse, Enumeration, Variable, Bitfeld oder einen unbenannten Namespace darstellt, wird false zurückgegeben.
  • Andernfalls, wenn r einen Typalias darstellt, wird !std::meta::has_template_arguments(r) zurückgegeben.
  • Andernfalls, wenn r einen Typ darstellt, wird true zurückgegeben, wenn:
  • r einen cv-unqualifizierten Klassentyp darstellt und std::meta::has_template_arguments(r) false ist, oder
  • r einen cv-unqualifizierten Enumerationstyp darstellt.
  • Andernfalls, wenn r eine Funktion darstellt, wird true zurückgegeben, wenn std::meta::has_template_arguments(r) false ist und die Funktion kein Konstruktor, Destruktor, Operatorfunktion oder Konvertierungsfunktion ist.
  • Andernfalls, wenn r eine Schablone (Template) darstellt, wird true zurückgegeben, wenn die Schablone keine Konstruktorschablone, Operatorfunktionsschablone oder Konvertierungsfunktionsschablone ist.
  • Andernfalls, wenn r einen Funktionsparameter einer Funktion darstellt, die aus einer Funktionsschablone instanziiert wurde, und der Parameter ein Element eines Funktionsparameterpakets ist, wird false zurückgegeben.
  • Andernfalls, wenn r einen Funktionsparameter P einer Funktion F darstellt, dann sei S die Menge der Deklarationen, die explizite Instantiierungen ignorieren, die von einem Punkt im Auswertungskontext aus erreichbar sind und die entweder F oder eine Schablonenfunktion, von der F eine Spezialisierung ist, deklarieren; true wird zurückgegeben, wenn
  • es eine Deklaration D in S gibt, die einen Namen N für entweder P oder den Parameter, der P in der Schablonenfunktion entspricht, die D deklariert, einführt, und
  • keine Deklaration in S dies unter Verwendung eines anderen Namens als N tut.
void fun(int);
constexpr std::meta::info r = parameters_of(^^fun)[0];
static_assert(!has_identifier(r));

void fun(int x);
static_assert(has_identifier(r));

void fun(int x);
static_assert(has_identifier(r));

void poison() {
    void fun(int y);
}
static_assert(!has_identifier(r));
  • Andernfalls, wenn r eine Variable darstellt, wird false zurückgegeben, wenn entweder die Variable einem Element eines Funktionsparameterpakets entspricht oder std::meta::has_template_arguments(r) true ist, andernfalls true zurückgegeben.
  • Andernfalls, wenn r eine strukturierte Bindung darstellt, wird false zurückgegeben, wenn die strukturierte Bindung ein Element eines strukturierten Bindungspakets ist, oder true andernfalls.
  • Andernfalls, wenn r einen Enumerator, ein nicht-statisches Datenmitglied, einen Namespace oder einen Namespace-Alias darstellt, wird true zurückgegeben.
  • Andernfalls, wenn r eine direkte Basisklassenbeziehung darstellt, wird std::meta::has_identifier(std::meta::type_of(r)) zurückgegeben.
  • Andernfalls, wenn r eine Datenmitgliedsbeschreibung (T, N, A, W, NUA, ANN) darstellt, wird true zurückgegeben, wenn der Name N der Beschreibung nicht ⊥ ist.
  • Andernfalls wird false zurückgegeben.

Parameter

r - ein Reflexionswert

Rückgabewert

truetrue, wenn das, was r darstellt, einen Bezeichner hat, andernfalls false false.

Beispiel

Siehe auch

wandelt einen meta::operators-Enumerator in seinen symbolischen Namen um
(Funktion)
wenn die reflektierte Entität einen Bezeichner hat, erhält seinen Namen
(Funktion)
erhält eine Zeichenkette, die zur Identifizierung der reflektierten Entität geeignet ist
(Funktion)