- functional[meta header]
- std[meta namespace]
- function template[meta id-type]
- cpp11[meta cpp]
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)
}
- reference_wrapper[link reference_wrapper.md]
変数への参照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;
}
- std::ref[color ff0000]
- std::reference_wrapper[link reference_wrapper.md]
- r.get()[link reference_wrapper/get.md]
4
- C++11
- Clang: ??
- GCC:
- GCC, C++11 mode: 4.7.0
- ICC: ??
- Visual C++: ??
- P0357R3 reference_wrapper for incomplete types
- テンプレートパラメータ
T
に不完全型が許可された経緯
- テンプレートパラメータ
- P1065R2 constexpr INVOKE