std::same_as

std::same_as (동일 타입 개념)

두 타입 TU가 정확히 같은 타입인지(및 서로 반대 방향으로도)를 명세하는 개념(concept)이에요. C++20부터 있어요.

출처: cppreference

본문

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

template< class T, class U >
concept same_as = std::is_same_v<T, U> && std::is_same_v<U, T>;

개념 same_as<T, U>TU가 동일한 타입일 때(그리고 그때만) 만족돼요. is_same_v<T, U> && is_same_v<U, T>로 양방향을 확인하지만 실질적으로 is_same과 같은 결과를 내요.

same_asrequires 표현식에서 어떤 표현식의 결과 타입이 정확히 기대한 타입인지 검사할 때 가장 흔히 쓰여요. 예를 들어 특정 연산이 정확히 T 타입을 반환하는지 제약할 수 있어요.

template <class T> concept ... = requires {
    { some_expression } -> std::same_as<T>;
};

이 패턴은 표준 라이브러리의 많은 개념 정의에서 "정확히 이 타입이어야 한다"는 제약을 거는 데 핵심으로 쓰여요. is_same과 달리 개념이므로 오버로드 해석·제약 문맥에서 문법적으로 활용할 수 있어요.

참고 문헌

  • C++23 표준 (ISO/IEC 14882:2024): 18.4.2 Concept same_as [concept.same]
  • C++20 표준 (ISO/IEC 14882:2020): 18.4.2 Concept same_as [concept.same]

더 알아보기 (Learn more)

cppreference