Namespaces
Variants

std:: is_pointer_interconvertible_base_of

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)
(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 Base, class Derived >
struct is_pointer_interconvertible_base_of ;
(depuis C++20)

Si Derived est dérivé de manière non ambiguë de Base et que chaque objet Derived est interconvertible par pointeur avec son sous-objet Base , ou si les deux sont la même classe non-union (dans les deux cas en ignorant les qualificatifs cv), fournit la constante membre value égale à true . Sinon value est false .

Si les deux Base et Derived sont des types de classe non-union, et qu'ils ne sont pas du même type (en ignorant les qualifications cv), Derived doit être un type complet ; sinon le comportement est indéfini.

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

Table des matières

Modèle de variable d'assistance

template < class Base, class Derived >

inline constexpr bool is_pointer_interconvertible_base_of_v =

is_pointer_interconvertible_base_of < Base, Derived > :: value ;
(depuis C++20)

Hérité de std:: integral_constant

Constantes membres

value
[static]
true si Derived est dérivé sans ambiguïté de Base et que chaque objet Derived est pointer-interconvertible avec son sous-objet Base , ou si les deux sont la même classe non-union (dans les deux cas en ignorant les qualificateurs cv), 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

std :: is_pointer_interconvertible_base_of_v < T, U > peut être true même si T est une classe de base privée ou protégée de U .

Soit

  • U soit un type d'objet complet,
  • T soit un type d'objet complet avec une qualification cv non inférieure à U ,
  • u soit toute lvalue valide de U ,

reinterpret_cast < T & > ( u ) a toujours un résultat bien défini si std :: is_pointer_interconvertible_base_of_v < T, U > est true .

Si T et U ne sont pas du même type (en ignorant les qualifications cv) et que T est une classe de base convertible en pointeur de U , alors à la fois std:: is_standard_layout_v < T > et std:: is_standard_layout_v < U > sont true .

Si T est un type de classe standard-layout, alors toutes les classes de base de T (le cas échéant) sont des classes de base pointer-interconvertibles de T .

Macro de test de fonctionnalité Valeur Std Fonctionnalité
__cpp_lib_is_pointer_interconvertible 201907L (C++20) Traits d'interconvertibilité de pointeurs :

Exemple

#include <type_traits>
struct Foo {};
struct Bar {};
class Baz : Foo, public Bar { int x; };
class NonStdLayout : public Baz { int y; };
static_assert(std::is_pointer_interconvertible_base_of_v<Bar, Baz>);
static_assert(std::is_pointer_interconvertible_base_of_v<Foo, Baz>);
static_assert(not std::is_pointer_interconvertible_base_of_v<Baz, NonStdLayout>);
static_assert(std::is_pointer_interconvertible_base_of_v<NonStdLayout, NonStdLayout>);
int main() {}

Voir aussi

(C++11)
vérifie si un type est une base d'un autre type
(modèle de classe)
(C++11)
vérifie si un type est un type classe (mais pas union) et n'a pas de membres de données non statiques
(modèle de classe)
vérifie si un type est un type standard-layout
(modèle de classe)