std::basic_common_reference<std::reference_wrapper>
来自 zh.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)和一个类型 T(分别应用 cv 和引用限定符后记为 RQ 和 TQ)的公共引用类型,等价于应用了左值引用的底层类型 R 与 TQ 之间的公共引用类型。
公共引用类型仅在满足以下条件时才会被定义:R 是唯一的 reference_wrapper,并且应用了左值引用的底层类型 R 与 TQ 存在一个公共引用类型,且 RQ 必须可转换为该公共引用类型。
仅用于阐述的常量 /*is-ref-wrapper*/<R> 在且仅在 true 是 Rstd::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() {}
参见
|
确定一组类型的公共引用类型
(类模板) |