std::default_initializable(3)

NAME
std::default_initializable - std::default_initializable

Synopsis
   Defined in header <concepts>
   template < class T >
   concept default_initializable = std::constructible_from<T> && (since C++20)
   requires { T{}; } &&
   /* T t; is well-formed, see below */;
   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
   constructible_from constructed from or bound to a set of argument
   (C++20) types
                        (concept)
   is_default_constructible
   is_trivially_default_constructible
   is_nothrow_default_constructible checks if a type has a default constructor
   (C++11) (class template)
   (C++11)
   (C++11)