std:: derived_from
|
Défini dans l'en-tête
<concepts>
|
||
|
template
<
class
Derived,
class
Base
>
concept derived_from
=
|
(depuis C++20) | |
Le concept
derived_from
<
Derived, Base
>
est satisfait si et seulement si
Base
est un type de classe qui est soit
Derived
, soit une base publique et non ambiguë de
Derived
, en ignorant les qualificatifs cv.
Notez que ce comportement est différent de
std::is_base_of
lorsque
Base
est une base privée ou protégée de
Derived
.
Exemple
#include <concepts> class A {}; class B : public A {}; class C : private A {}; // std::derived_from == true uniquement pour l'héritage public ou la même classe exacte static_assert(std::derived_from<B, B> == true); // même classe : true static_assert(std::derived_from<int, int> == false); // même type primitif : false static_assert(std::derived_from<B, A> == true); // héritage public : true static_assert(std::derived_from<C, A> == false); // héritage privé : false // std::is_base_of == true également pour l'héritage privé static_assert(std::is_base_of_v<B, B> == true); // même classe : true static_assert(std::is_base_of_v<int, int> == false); // même type primitif : false static_assert(std::is_base_of_v<A, B> == true); // héritage public : true static_assert(std::is_base_of_v<A, C> == true); // héritage privé : true int main() {}
Références
- Norme C++23 (ISO/CEI 14882:2024) :
-
-
18.4.3 Concept
derived_from[concept.derived]
-
18.4.3 Concept
- Norme C++20 (ISO/IEC 14882:2020) :
-
-
18.4.3 Concept
derived_from[concept.derived]
-
18.4.3 Concept
Voir aussi
|
(C++11)
|
vérifie si un type est une base d'un autre type
(modèle de classe) |
|
(C++11)
(C++20)
|
vérifie si un type peut être converti en un autre type
(modèle de classe) |