namespace std {
template<class T> class reference_wrapper {
public:
using type = T;
template<class U>
constexpr reference_wrapper(U&&) noexcept(see below);
constexpr reference_wrapper(const reference_wrapper& x) noexcept;
constexpr reference_wrapper& operator=(const reference_wrapper& x) noexcept;
constexpr operator T& () const noexcept;
constexpr T& get() const noexcept;
template<class... ArgTypes>
constexpr invoke_result_t<T&, ArgTypes...> operator()(ArgTypes&&...) const;
};
template<class T>
reference_wrapper(T&) -> reference_wrapper<T>;
}
reference_wrapper<T> is a
Cpp17CopyConstructible and
Cpp17CopyAssignable wrapper
around a reference to an object or function of type
T. The template parameter
T of
reference_wrapper
may be an incomplete type
.