Namespaces
Variants

std:: is_literal_type

From cppreference.net
Metaprogramming library
Type traits
Type categories
(C++11)
(C++11) ( DR* )
Type properties
(C++11)
(C++11)
(C++14)
(C++11) (deprecated in C++26)
is_literal_type
(C++11) ( until C++20* )
(C++11) (deprecated in C++20)
(C++11)
Type trait constants
Metafunctions
(C++17)
Supported operations
Relationships and property queries
Type modifications
Type transformations
(C++11) (deprecated in C++23)
(C++11) (deprecated in C++23)
(C++11)
(C++11) ( until C++20* ) (C++17)

Compile-time rational arithmetic
Compile-time integer sequences
Défini dans l'en-tête <type_traits>
template < class T >
struct is_literal_type ;
(depuis C++11)
(obsolète en C++17)
(supprimé en C++20)

std::is_literal_type est un UnaryTypeTrait .

(Ce trait de type a été déprécié [1] et supprimé [2] car il offrait une valeur négligeable au code générique.)

Si T satisfait toutes les exigences de LiteralType , fournit la constante membre value égale à true . Pour tout autre type, value est false .

Si std:: remove_all_extents_t < T > est un type incomplet et n'est pas (éventuellement qualifié cv) void , le comportement est indéfini.

Si le programme ajoute des spécialisations pour std::is_literal_type ou std::is_literal_type_v , le comportement est indéfini.

Sommaire

Paramètres du modèle

T - un type à vérifier

Modèle de variable d'assistance

template < class T >
constexpr bool is_literal_type_v = is_literal_type < T > :: value ;
(depuis C++17)
(obsolète)
(supprimé en C++20)

Hérité de std:: integral_constant

Constantes membres

value
[static]
true si T est un type littéral, false sinon
(constante membre publique statique)

Fonctions membres

operator bool
convertit l'objet en bool , retourne value
(fonction membre publique)
operator()
(C++14)
retourne value
(fonction membre publique)

Types membres

Type Définition
value_type bool
type std:: integral_constant < bool , value >

Notes

Seuls les types littéraux peuvent être utilisés comme paramètres ou renvoyés par constexpr functions . Seules les classes littérales peuvent avoir des fonctions membres constexpr.

Exemple

#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() {}

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Appliqué à Comportement publié Comportement correct
LWG 2015 C++11 T pouvait être un tableau de type classe
incomplet avec une limite inconnue
le comportement est
indéfini dans ce cas

Liens externes

  1. Alisdair Meredith. "Déprécier le trait is_literal " . Dépréciation des parties vestigiales de la bibliothèque en C++17 . "Le trait de type is_literal offre une valeur négligeable au code générique, car ce qui est réellement nécessaire est la capacité de savoir qu'une construction spécifique produirait une initialisation constante."
  2. Alisdair Meredith, Stephan T. Lavavej, Tomasz Kamiński. "Traits de type dépréciés" . Révision des fonctionnalités dépréciées de C++17 pour C++20 . " Recommandation forte : Supprimer les traits qui peuvent survivre en tant que zombies. [...] Revue de Toronto : Accepter la recommandation forte, retirer de C++20."