std::common_reference_with

std::common_reference_with (공통 참조 개념)

두 타입 TU가 모두 변환될 수 있는 공통 참조 타입(std::common_reference_t로 계산)을 공유하는지를 명세하는 개념(concept)이에요. C++20부터 있어요.

출처: cppreference

본문

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

template< class T, class U >
concept common_reference_with =
    std::same_as<std::common_reference_t<T, U>, std::common_reference_t<U, T>> &&
    std::convertible_to<T, std::common_reference_t<T, U>> &&
    std::convertible_to<U, std::common_reference_t<T, U>>;

개념 common_reference_with<T, U>는 두 타입 TU가 공통 참조 타입(std::common_reference_t로 계산)을 공유하며, 둘 다 그 타입으로 변환될 수 있음을 명세해요.

의미 요구사항

TU는 다음일 때만 std::common_reference_with<T, U>를 모델링해요. 동등성 보존 표현식 t1, t2, u1, u2가 주어지고 decltype((t1))·decltype((t2))가 모두 T이며 decltype((u1))·decltype((u2))가 모두 U일 때,

  • std::common_reference_t<T, U>(t1)std::common_reference_t<T, U>(t2)와 같음은 t1t2와 같을 때와 그때만; 그리고
  • std::common_reference_t<T, U>(u1)std::common_reference_t<T, U>(u2)와 같음은 u1u2와 같을 때와 그때만.

즉 공통 참조 타입으로의 변환이 동등성을 보존해야 해요.

참고 문헌

  • C++23 표준 (ISO/IEC 14882:2024): 18.4.5 Concept common_reference_with [concept.commonref]
  • C++20 표준 (ISO/IEC 14882:2020): 18.4.5 Concept common_reference_with [concept.commonref]

common_reference_withstd::common_reference가 계산하는 참조 타입으로 두 타입이 안전하게 묶일 수 있는지를 판별하는 데 쓰여요. 범위(range)나 반복자(iterator) 관련 개념에서 두 표현식이 공통 참조를 가지는지 확인할 때 유용해요.

더 알아보기 (Learn more)

cppreference