std::default_initializable
From cppreference.com
                    
                                        
                    
                    
                                                            
                    |   Defined in header  <concepts>
  | 
||
|   template< class T > concept default_initializable = std::constructible_from<T> && requires { T{}; } &&   | 
(since C++20) | |
The default_initializable concept checks whether variables of type T can be 
- value-initialized (i.e., whether T() is well-formed);
 - direct-list-initialized from an empty initializer list (i.e., whether T{} is well-formed); and
 - default-initialized (i.e., whether 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{}; ::new T; };  | 
References
- C++23 standard (ISO/IEC 14882:2024):
 
-  18.4.12 Concept 
default_initializable[concept.default.init] 
-  18.4.12 Concept 
 
- C++20 standard (ISO/IEC 14882:2020):
 
-  18.4.12 Concept 
default_initializable[concept.default.init] 
-  18.4.12 Concept 
 
See also
|    (C++20)  | 
  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)  |