std::default_initializable
std::default_initializable (기본 초기화 가능 개념)
T 타입의 변수가 값 초기화, 빈 초기화 리스트로부터의 직접 리스트 초기화, 기본 초기화가 될 수 있는지를 확인하는 개념(concept)이에요. C++20부터 있어요.
출처: cppreference
본문
<concepts> 헤더에 정의돼 있어요.
template< class T >
concept default_initializable = std::constructible_from<T> && requires { T{}; } &&
/* T t; is well-formed, see below */;
default_initializable 개념은 T 타입의 변수가 다음이 될 수 있는지 확인해요.
- 값 초기화(value-initialized) (즉
T()가 well-formed인지). - 빈 초기화 리스트로부터의 직접 리스트 초기화(direct-list-initialized) (즉
T{}가 well-formed인지). - 기본 초기화(default-initialized) (즉
T t;가 well-formed인지).
접근 검사는 T와 무관한 문맥에서 수행되는 것처럼 이뤄져요. 변수 초기화의 직접 문맥(immediate context)의 유효성만 고려돼요.
가능한 구현
template<class T>
concept default_initializable =
std::constructible_from<T> &&
requires { T{}; ::new T; };
참고 문헌
- C++23 표준 (ISO/IEC 14882:2024): 18.4.12 Concept default_initializable [concept.default.init]
- C++20 표준 (ISO/IEC 14882:2020): 18.4.12 Concept default_initializable [concept.default.init]
이 개념은 std::default_constructible 같은 패턴을 일반화한 것으로, 타입이 인자 없이 만들어질 수 있는지와 그 변수가 (기본 return 문 등에서) 선언될 수 있는지를 함께 검사해요.