Namespaces
Variants

std:: is_abstract

From cppreference.net
Metaprogramming library
Type traits
Type categories
(C++11)
(C++11) ( DR* )
Type properties
(C++11)
(C++11)
(C++14)
is_abstract
(C++11)
(C++11) (deprecated in C++26)
(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_abstract ;
(depuis C++11)

std::is_abstract est un UnaryTypeTrait .

Si T est une classe abstraite (c'est-à-dire une classe non-union qui déclare ou hérite d'au moins une fonction virtuelle pure), fournit la constante membre value égale à true . Pour tout autre type, value est false .

Si T est un type de classe non-union incomplet, le comportement est indéfini.

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

Table des matières

Paramètres du modèle

T - un type à vérifier

Modèle de variable d'assistance

template < class T >
constexpr bool is_abstract_v = is_abstract < T > :: value ;
(depuis C++17)

Hérité de std:: integral_constant

Constantes membres

value
[static]
true si T est un type de classe abstraite , 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 >

Exemple

#include <iostream>
#include <type_traits>
struct A { int m; };
static_assert(std::is_abstract_v<A> == false);
struct B { virtual void foo(); };
static_assert(std::is_abstract_v<B> == false);
struct C { virtual void foo() = 0; };
static_assert(std::is_abstract_v<C> == true);
struct D : C {};
static_assert(std::is_abstract_v<D> == true);
struct E : C { void foo() override {} };
static_assert(std::is_abstract_v<E> == false);
int main() {}
Seul le texte "Run this code" a été traduit en "Exécuter ce code". Tous les autres éléments ont été préservés conformément aux instructions : - Les balises HTML et leurs attributs sont inchangés - Le code C++ dans les balises `
` n'a pas été traduit
- Les termes spécifiques au C++ sont conservés
- La mise en forme originale est maintenue

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 S'applique à Comportement publié Comportement corrigé
LWG 2015 C++11 le comportement était indéfini si
T est un type union incomplet
la caractéristique de base est
std::false_type dans ce cas

Voir aussi

(C++11)
vérifie si un type est un type classe non-union
(modèle de classe)
vérifie si un type est un type classe polymorphe
(modèle de classe)