名稱空間
變體
操作

std::basic_common_reference<std::reference_wrapper>

來自 cppreference.com
 
 
 
函式物件
函式呼叫
(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 和引用限定符(分別表示為 RQTQ),等價於 R 的底層型別應用左值引用和 TQ 的共同引用型別。

僅當 R 是唯一 reference_wrapper 時才定義共同引用型別,並且 R 的底層型別應用左值引用和 TQ 具有共同引用型別,RQ 必須可轉換為該共同引用型別。

僅當 Rstd::reference_wrapper 的特化時,才為 exposition-only 常量 /*is-ref-wrapper*/<R> 的值為 true

目錄

[編輯] 成員型別

成員型別 定義
型別 std::common_reference_t<typename R::type&, TQual<T>> (1,2)

[編輯] 註解

特性測試 標準 特性
__cpp_lib_common_reference_wrapper 202302L (C++23) std::reference_wrapperstd::common_reference_t 設為引用型別

[編輯] 示例

#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() {}

[編輯] 參閱

確定一組型別的公共引用型別
(類模板) [編輯]