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 문 등에서) 선언될 수 있는지를 함께 검사해요.

더 알아보기 (Learn more)

cppreference