Namespaces
Variants

std::basic_common_reference<std::reference_wrapper>

来自 zh.cppreference.net
 
 
 
函数对象
函数调用
(C++17)(C++23)
恒等函数对象
(C++20)
透明运算符包装器
(C++14)
(C++14)
(C++14)
(C++14)  
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)

旧的绑定器和适配器
(直到 C++17*)
(直到 C++17*)
(直到 C++17*)
(直到 C++17*)  
(直到 C++17*)
(直到 C++17*)(直到 C++17*)(直到 C++17*)(直到 C++17*)
(直到 C++20*)
(直到 C++20*)
(直到 C++17*)(直到 C++17*)
(直到 C++17*)(直到 C++17*)

(直到 C++17*)
(直到 C++17*)(直到 C++17*)(直到 C++17*)(直到 C++17*)
(直到 C++20*)
(直到 C++20*)
 
 
定义于头文件 <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() {}

参见

确定一组类型的公共引用类型
(类模板)