Namensräume
Varianten
Aktionen

std::is_literal_type

Von cppreference.com
< cpp‎ | types
 
 
Metaprogrammierungsbibliothek
Typmerkmale
Typkategorien
(C++11)
(C++11)(DR*)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11) 
(C++11)
(C++11)
Typeneigenschaften
(C++11)
(C++11)
(C++14)
(C++11)(deprecated in C++26)
is_literal_type
(C++11)(bis C++20*)
(C++11)(veraltet in C++20)
(C++11)
Typmerkmalskonstanten
Metafunktionen
(C++17)
Unterstützte Operationen
Beziehungen und Eigenschaftsabfragen
Typmodifikationen
(C++11)(C++11)(C++11)
Typentransformationen
(C++11)(veraltet in C++23)
(C++11)(veraltet in C++23)
(C++11)
(C++11)(bis C++20*)(C++17)

(C++11)
(C++11)
(C++17)
Rationale Arithmetik zur Compilezeit
Ganzzahlsequenzen zur Compilezeit
 
Definiert in der Kopfdatei <type_traits>
template< class T >
struct is_literal_type;
(seit C++11)
(veraltet in C++17)
(in C++20 entfernt)

std::is_literal_type ist ein UnaryTypeTrait.

(Diese Typ-Trait wurde [1] als von geringem Wert für generischen Code [2] als veraltet markiert und entfernt.)

Wenn T alle Anforderungen an einen LiteralType erfüllt, liefert sie das Mitgliedskonstante value gleich 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_literal_type oder std::is_literal_type_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_literal_type_v = is_literal_type<T>::value;
(seit C++17)
(veraltet)
(in C++20 entfernt)

Abgeleitet von std::integral_constant

Member-Konstanten

value
[static]
true, wenn T ein Literal-Typ ist, andernfalls false
(ö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>

[bearbeiten] Anmerkungen

Nur Literal-Typen dürfen als Parameter für constexpr-Funktionen verwendet oder von ihnen zurückgegeben werden. Nur Literal-Klassen dürfen constexpr-Member-Funktionen haben.

[bearbeiten] Beispiel

#include <type_traits>
 
struct A { int m; };
static_assert(std::is_literal_type_v<A> == true);
 
struct B { virtual ~B(); };
static_assert(std::is_literal_type_v<B> == false);
 
int main() {}

[bearbeiten] Defect Reports

Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR angewendet auf Verhalten wie veröffentlicht Korrigiertes Verhalten
LWG 2015 C++11 T könnte ein Array eines unvollständigen
Klassentyps mit unbekannter Größe sein
Das Verhalten ist
in diesem Fall nicht definiert.

[bearbeiten] Externe Links

  1. Alisdair Meredith. "Deprecate the is_literal Trait". Deprecating Vestigial Library Parts in C++17. "Die is_literal Typ-Trait bietet einen vernachlässigbaren Wert für generischen Code, da, was wirklich benötigt wird, die Fähigkeit ist zu wissen, dass eine bestimmte Konstruktion eine konstante Initialisierung ergibt."
  2. Alisdair Meredith, Stephan T. Lavavej, Tomasz Kamiński. "Deprecated type traits". Reviewing Deprecated Facilities of C++17 for C++20. "Starke Empfehlung: Entfernen Sie die Traits, die als Zombies weiterleben können. [...] Toronto Review: Starke Empfehlung akzeptieren, aus C++20 streichen."