std:: is_default_constructible, std:: is_trivially_default_constructible, std:: is_nothrow_default_constructible
|
Défini dans l'en-tête
<type_traits>
|
||
|
template
<
class
T
>
struct is_default_constructible ; |
(1) | (depuis C++11) |
|
template
<
class
T
>
struct is_trivially_default_constructible ; |
(2) | (depuis C++11) |
|
template
<
class
T
>
struct is_nothrow_default_constructible ; |
(3) | (depuis C++11) |
Si
T
n'est pas un type complet, (éventuellement qualifié cv)
void
, ou un tableau de limite inconnue, le comportement est indéfini.
Si une instanciation d'un modèles ci-dessus dépend, directement ou indirectement, d'un type incomplet, et que cette instanciation pourrait produire un résultat différent si ce type était hypothétiquement complété, le comportement est indéfini.
Si le programme ajoute des spécialisations pour l'un des modèles décrits sur cette page, le comportement est indéfini.
Table des matières |
Modèles de variables auxiliaires
|
template
<
class
T
>
inline
constexpr
bool
is_default_constructible_v
=
|
(depuis C++17) | |
|
template
<
class
T
>
inline
constexpr
bool
is_trivially_default_constructible_v
=
|
(depuis C++17) | |
|
template
<
class
T
>
inline
constexpr
bool
is_nothrow_default_constructible_v
=
|
(depuis C++17) | |
Hérité de std:: integral_constant
Constantes membres
|
value
[static]
|
true
si
T
est default-constructible,
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 > |
Implémentation possible
template<class T> struct is_default_constructible : std::is_constructible<T> {}; template<class T> struct is_trivially_default_constructible : std::is_trivially_constructible<T> {}; template<class T> struct is_nothrow_default_constructible : std::is_nothrow_constructible<T> {}; |
Notes
Dans de nombreuses implémentations,
std::is_nothrow_default_constructible
vérifie également si le destructeur lève des exceptions car il est effectivement
noexcept
(
T
(
)
)
. La même chose s'applique à
std::is_trivially_default_constructible
, qui, dans ces implémentations, exige également que le destructeur soit trivial :
GCC bug 51452
,
LWG issue 2116
.
std :: is_default_constructible < T > ne teste pas que T x ; serait compilable ; il tente une initialisation directe avec une liste d'arguments vide (voir std::is_constructible ). Ainsi, std :: is_default_constructible_v < const int > et std :: is_default_constructible_v < const int [ 10 ] > sont true .
Exemple
#include <string> #include <type_traits> struct S1 { std::string str; // le membre a un constructeur par défaut non trivial }; static_assert(std::is_default_constructible_v<S1> == true); static_assert(std::is_trivially_default_constructible_v<S1> == false); struct S2 { int n; S2() = default; // trivial et non levée d'exception }; static_assert(std::is_trivially_default_constructible_v<S2> == true); static_assert(std::is_nothrow_default_constructible_v<S2> == true); int main() {}
Voir aussi
|
(C++11)
(C++11)
(C++11)
|
vérifie si un type a un constructeur pour des arguments spécifiques
(modèle de classe) |
|
(C++11)
(C++11)
(C++11)
|
vérifie si un type a un constructeur de copie
(modèle de classe) |
|
(C++11)
(C++11)
(C++11)
|
vérifie si un type peut être construit à partir d'une référence rvalue
(modèle de classe) |
|
(C++20)
|
spécifie qu'un objet d'un type peut être construit par défaut
(concept) |