std::basic_common_reference<std::reference_wrapper>
cppreference.net에서 가져옴
| 헤더 <functional>
|
||
template< class R, class T,
template<class> RQual, template<class> TQual >
requires (/*ref-wrap-common-reference-exists-with*/<R, T, RQual<R>, TQual<T>> &&
!/*ref-wrap-common-reference-exists-with*/<T, R, TQual<T>, RQual<R>>)
struct basic_common_reference<R, T, RQual, TQual>;
|
에 정의됨 (1) | (C++23부터) |
template< class T, class R,
template<class> TQual, template<class> RQual >
requires (/*ref-wrap-common-reference-exists-with*/<R, T, RQual<R>, TQual<T>> &&
!/*ref-wrap-common-reference-exists-with*/<T, R, TQual<T>, RQual<R>>)
struct basic_common_reference<T, R, TQual, RQual>;
|
(2) | (C++23부터) |
| 도우미 개념 |
||
template< class R, class T, class RQ, class TQ >
concept /*ref-wrap-common-reference-exists-with*/ =
/*is-ref-wrapper*/<R> &&
requires { typename std::common_reference_t<typename R::type&, TQ>; } &&
std::convertible<RQ, std::common_reference_t<typename R::type&, TQ>>;
|
(3) | (설명 전용*) |
reference_wrapper (R으로 표시) 의 공통 참조 타입과 cv 및 참조 한정자가 각각 적용된 타입 T (RQ 및 TQ으로 각각 표시) 은 R의 기본 타입에 lvalue 참조를 적용한 것과 TQ의 공통 참조 타입과 동일합니다.
공통 참조 타입은 R이 유일한 reference_wrapper이고, lvalue 참조가 적용된 R의 기본 타입과 TQ가 공통 참조 타입을 가지며, RQ이 해당 타입으로 변환 가능해야만 정의됩니다.
설명 전용 상수 /*is-ref-wrapper*/<R>은 true가 R의 특수화인 경우에만 std::reference_wrapper입니다.
멤버 타입
| 멤버 타입 | 정의 |
type
|
std:: common_reference_t < typename R :: type & , TQual < T >> ( 1,2 ) |
참고 사항
| 기능 테스트 매크로 | 값 | 표준 | 기능 |
|---|---|---|---|
__cpp_lib_common_reference_wrapper
|
202302L
|
(C++23) | std::common_reference_t 의 std::reference_wrapper 를 참조 타입으로 만들기 |
예제
이 코드 실행
#include <concepts> #include <functional> static_assert(std::same_as<std::common_reference_t<int&, std::reference_wrapper<int>>, int&>); static_assert(std::same_as<std::common_reference_t<std::reference_wrapper<int>&, int&>, int&>); static_assert(std::same_as<std::common_reference_t<int&, const std::reference_wrapper<int>&>, int&>); int main() {}
참고 항목
|
여러 타입들의 공통 참조 타입을 결정합니다
(클래스 템플릿) |