名前空間
変種
操作

std::reference_wrapper::reference_wrapper

提供: cppreference.com
 
 
 
関数オブジェクト
関数ラッパー
(C++11)
(C++11)
バインド
(C++11)
関数呼び出し
(C++17)
恒等関数オブジェクト
(C++20)
参照ラッパー
(C++11)(C++11)
演算子ラッパー
否定子
(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以前)
 
 
(1)
reference_wrapper( T& x ) noexcept;
reference_wrapper( T&& x ) = delete;
(C++20以前)
template< class U >
reference_wrapper( U&& x ) noexcept(/*see below*/) ;
(C++20およびそれ以降)
reference_wrapper( const reference_wrapper& other ) noexcept;
(2)

新しい参照ラッパーを構築します。

1) x への参照を格納します。 一時オブジェクトからの構築はできません。

(C++20以前)

1) T& t = std::forward<U>(x); によって行われたかのように xT& に変換し、その後 t への参照を格納します。 このオーバーロードは、std::is_same_v<std::remove_cvref_t<U>, reference_wrapper>false であり、式 FUN(std::declval<U>()) が well-formed である場合にのみ、オーバーロード解決に参加します。 ただし FUN は以下のような架空の関数の集合を表します。

void FUN(T&) noexcept;
void FUN(T&&) = delete;
(C++20およびそれ以降)

2) コピーコンストラクタ。 other.get() への参照を格納します。

[編集] 引数

x - ラップするオブジェクト
other - 別の参照ラッパー

[編集] 例外

1)
noexcept 指定:  
noexcept(noexcept(FUN(std::declval<U>())))
ただし FUN は上の説明で説明されている架空の関数の集合です。
(C++20およびそれ以降)

[編集] ノート

オーバーロード解決で予期しない結果に繋がり得る、 C++20 以前の削除された T&& からのコンストラクタは、暗黙の変換のシーケンスの形成に引き続き参加します。 C++20 の変更 (LWG issue 2993 による) はこの問題を修正します。