std::unwrap_reference,std::unwrap_ref_decay (3) - Linux Manuals

std::unwrap_reference,std::unwrap_ref_decay: std::unwrap_reference,std::unwrap_ref_decay

NAME

std::unwrap_reference,std::unwrap_ref_decay - std::unwrap_reference,std::unwrap_ref_decay

Synopsis


Defined in header <functional>
template< class T > (1) (since C++20)
struct unwrap_reference;
template< class T > (2) (since C++20)
struct unwrap_ref_decay : std::unwrap_reference<std::decay_t<T>> {};


1) If T is std::reference_wrapper<U> for some type U, provides a member typedef type that names U&; otherwise, provides a member typedef type that names T.
2) If T is std::reference_wrapper<U> for some type U, ignoring cv-qualification and referenceness, provides a member typedef type that names U&; otherwise, provides a member typedef type that names std::decay_t<T>.

Member types


Name Definition
type 1) U& if T is std::reference_wrapper<U>; T otherwise
     2) U& if std::decay_t<T> is std::reference_wrapper<U>; std::decay_t<T> otherwise

Helper types


template<class T> (since C++20)
using unwrap_ref_decay_t = typename unwrap_ref_decay<T>::type;

Possible implementation


  template <class T>
  struct unwrap_reference { using type = T; };
  template <class U>
  struct unwrap_reference<std::reference_wrapper<U>> { using type = U&; };

Notes


std::unwrap_ref_decay performs the same transformation as used by std::make_pair and std::make_tuple.

Example


 This section is incomplete
 Reason: no example

See also


reference_wrapper CopyConstructible and CopyAssignable reference wrapper
                  (class template)
(C++11)
                  creates a pair object of type, defined by the argument types
make_pair (function template)
                  creates a tuple object of the type defined by the argument types
make_tuple (function template)