std::basic_common_reference<std::reference_wrapper>
ja.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 の基底型に左辺値参照を適用したものと、TQ との共通参照型と等価です。
共通参照型は、R が唯一の reference_wrapper である場合にのみ定義され、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() {}
関連項目
|
型のグループの共通参照型を決定する
(クラステンプレート) |