std::constructible_from

std::constructible_from (구성 가능성 개념)

T 타입의 변수가 주어진 인자 타입 집합 Args...로 초기화될 수 있는지를 명세하는 개념(concept)이에요. C++20부터 있어요.

출처: cppreference

본문

<concepts> 헤더에 정의돼 있어요.

template< class T, class... Args >
concept constructible_from =
    std::destructible<T> && std::is_constructible_v<T, Args...>;

constructible_from 개념은 T 타입의 변수가 주어진 인자 타입 집합 Args...로 초기화될 수 있음을 명세해요. T가 파괴 가능하고(destructible) 주어진 인자들로 구성 가능한지(is_constructible_v)를 모두 확인해요.

이 개념은 복사 생성(copy_constructible), 이동 생성(move_constructible), 기본 초기화(default_initializable) 등 다른 구성 관련 개념들의 기초가 돼요. T a(args...) 형태의 직접 초기화(direct-initialization) 문맥에서 Args... 타입의 인자들로 T가 구성 가능한지를 나타내요.

참고 문헌

  • C++23 표준 (ISO/IEC 14882:2024): 18.4.11 Concept constructible_from [concept.constructible]
  • C++20 표준 (ISO/IEC 14882:2020): 18.4.11 Concept constructible_from [concept.constructible]

실제로는 std::is_constructible_v<T, Args...>처럼 declval<Args>()...T를 생성하는 표현식이 well-formed인지 확인하며, T는 파괴 가능해야 해요. 제네릭 코드에서 타입이 어떤 인자들로 만들 수 있는지 제약할 때 널리 쓰여요.

더 알아보기 (Learn more)

cppreference