23 General utilities library [utilities]

23.14 Function objects [function.objects]

23.14.5 Class template reference_­wrapper [refwrap]

23.14.5.1 reference_­wrapper construct/copy/destroy [refwrap.const]

template<class U> reference_wrapper(U&& u) noexcept(see below);
Remarks: Let FUN denote the exposition-only functions
void FUN(T&) noexcept;
void FUN(T&&) = delete;
This constructor shall not participate in overload resolution unless the expression FUN(declval<U>()) is well-formed and is_­same_­v<decay_­t<U>, reference_­wrapper> is false.
The expression inside noexcept is equivalent to noexcept(FUN(declval<U>())).
Effects: Creates a variable r as if by T& r = std​::​forward<U>(u), then constructs a reference_­wrapper object that stores a reference to r.
reference_wrapper(const reference_wrapper& x) noexcept;
Effects: Constructs a reference_­wrapper object that stores a reference to x.get().