template<class U>
constexpr reference_wrapper(U&& 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&&... args) const noexcept(is_nothrow_invocable_v<T&, ArgTypes...>);
friend constexpr bool operator==(reference_wrapper x, reference_wrapper y);
friend constexpr bool operator==(reference_wrapper x, const T& y);
friend constexpr bool operator==(reference_wrapper x, reference_wrapper<const T> y);
friend constexpr auto operator<=>(reference_wrapper x, reference_wrapper y);
friend constexpr auto operator<=>(reference_wrapper x, const T& y);
friend constexpr auto operator<=>(reference_wrapper x, reference_wrapper<const T> y);
template<class T> constexpr reference_wrapper<T> ref(T& t) noexcept;
template<class T> constexpr reference_wrapper<T> ref(reference_wrapper<T> t) noexcept;
template<class T> constexpr reference_wrapper<const T> cref(const T& t) noexcept;
template<class T> constexpr reference_wrapper<const T> cref(reference_wrapper<T> t) noexcept;