std::is_def...structible,(3)
π NAME π
Okay bestie, welcome to the std::is_def...structible,(3) page from the C++ Standard Libary (yes, that's literally how the manual name is spelled, and we're keeping it π
).
The NAME line is exactly this chaotic little string, commas and all:
std::is_default_constructible,std::is_trivially_default_constructible, - std::is_default_constructible,std::is_trivially_default_constructible,
So yeah. It's giving "copy-paste had a moment," but we move. π«Ά
β¨ Synopsis β¨
Defined in header <type_traits>:
template< class T > (1) (since C++11)
struct is_default_constructible;
template< class T > (2) (since C++11)
struct is_trivially_default_constructible;
template< class T > (3) (since C++11)
struct is_nothrow_default_constructible;
- Provides the member constant
valueequal tostd::is_constructible<T>::value. - Provides the member constant
valueequal tostd::is_trivially_constructible<T>::value. - Provides the member constant
valueequal tostd::is_nothrow_constructible<T>::value.
β οΈ IfTis not a complete type, (possibly cv-qualified)void, or an array of unknown bound, the behavior is undefined. No cap, that's just the rules.
β οΈ If an instantiation of a template above depends, directly or indirectly, on an incomplete type, and that instantiation could yield a different result if that type were hypothetically completed, the behavior is undefined. Bestie, this is a "do not test fate" situation.
β οΈ If the program adds specializations for any of the templates described on this page, the behavior is undefined. Periodt.
π Member constants π
valueβtrueifTis default-constructible,falseotherwise.[static](public static member constant).
π¦ Member functions π¦
operator boolβ converts the object tobool, returnsvalue(public member function).operator()β returnsvalue(C++14) (public member function).
πΈ Member types πΈ
value_typeβbool.typeβstd::integral_constant<bool, value>.
π₯ Possible implementation π₯
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 π
In many implementations, std::is_nothrow_default_constructible also checks if the destructor throws because it is effectively noexcept(T()). Same applies to std::is_trivially_default_constructible, which, in these implementations, also requires that the destructor is trivial: GCC bug 51452, LWG issue 2116.
std::is_default_constructible<T> does not test that T x; would compile; it attempts direct-initialization with an empty argument list (see std::is_constructible). Thus, std::is_default_constructible_v<const int> and std::is_default_constructible_v<const int[10]> are true. Iconic behavior, honestly. π
π§ Example π§
// Run this code
#include <string>
#include <type_traits>
struct S1
{
std::string str; // member has a non-trivial default constructor
};
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 and non-throwing
};
static_assert(std::is_trivially_default_constructible_v<S2> == true);
static_assert(std::is_nothrow_default_constructible_v<S2> == true);
int main() {}
π See also π
is_constructible(C++11) β checks if a type has a constructor for specific arguments (class template).is_trivially_constructible(C++11) β checks if a type has a constructor for specific arguments (class template).is_nothrow_constructible(C++11) β checks if a type has a constructor for specific arguments (class template).is_copy_constructible(C++11) β checks if a type has a copy constructor (class template).is_trivially_copy_constructible(C++11) β checks if a type has a copy constructor (class template).is_nothrow_copy_constructible(C++11) β checks if a type has a copy constructor (class template).is_move_constructible(C++11) β checks if a type can be constructed from an rvalue reference (class template).is_trivially_move_constructible(C++11) β checks if a type can be constructed from an rvalue reference (class template).is_nothrow_move_constructible(C++11) β checks if a type can be constructed from an rvalue reference (class template).default_initializable(C++20) β specifies that an object of a type can be default constructed (concept).
Mwah π source/version: http://cppreference.com, dated 2024.06.10. That's the whole footer vibe, bestie β now go default-construct something responsibly. π«Άβ¨
π¦ where this page comes from
- nixpkgs unstable: stdman 2024.07.05
- opensuse-leap 16.0: stdman 2024.07.05-bp160.1.9 Β· MIT
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms