std::default_initializable

From cppreference.com
< cpp‎ | concepts
Defined in header <concepts>
template < class T >

concept default_initializable = std::constructible_from<T> && requires { T{}; } &&

                                /* T t; is well-formed, see below */;
(since C++20)

The default_initializable concept checks whether variables of type T can be

  • value-initialized (T() is well-formed);
  • direct-list-initialized from an empty initializer list (T{} is well-formed); and
  • default-initialized (T t; is well-formed).

Access checking is performed as if in a context unrelated to T. Only the validity of the immediate context of the variable initialization is considered.

Possible implementation

template<class T>
concept default_initializable =
    std::constructible_from<T> &&
    requires { T{}; } &&
    requires { ::new (static_cast<void*>(nullptr)) T; };

See also

specifies that a variable of the type can be constructed from or bound to a set of argument types
(concept)
checks if a type has a default constructor
(class template)