namespace std {
template <class T>
reference_wrapper<T> ref(T& t) noexcept; // (1) C++11
template <class T>
constexpr reference_wrapper<T> ref(T& t) noexcept; // (1) C++20
template <class T>
reference_wrapper<T> ref(reference_wrapper<T> t) noexcept; // (2) C++11
template <class T>
constexpr reference_wrapper<T> ref(reference_wrapper<T> t) noexcept; // (2) C++20
template <class T>
void ref(const T&&) = delete; // (3)
}
概要
変数への参照t
を保持するreference_wrapper
オブジェクトを生成する
C++20からは、テンプレートパラメーターT
は不完全型をサポートしている。
戻り値
- (1) :
t
を参照するreference_wrapper<T>
オブジェクトを返す。 - (2) :
t
をそのまま返す。
例外
投げない
例
#include <iostream>
#include <functional>
int main()
{
int x = 3;
// 参照ラッパーrは、変数xへの参照を保持する
std::reference_wrapper<int> r = std::ref(x);
++x;
std::cout << r.get() << std::endl;
}
xxxxxxxxxx
#include <iostream>
#include <functional>
int main()
{
int x = 3;
// 参照ラッパーrは、変数xへの参照を保持する
std::reference_wrapper<int> r = std::ref(x);
++x;
std::cout << r.get() << std::endl;
}
出力
4
バージョン
言語
- C++11
処理系
- Clang: ??
- GCC: 4.7.0 ✅
- ICC: ??
- Visual C++: ??
参照
- P0357R3 reference_wrapper for incomplete types
- テンプレートパラメータ
T
に不完全型が許可された経緯
- テンプレートパラメータ
- P1065R2 constexpr INVOKE