22 General utilities library [utilities]
22.10.6 Class template reference_wrapper [refwrap]
namespace std {
  template<class T>
    constexpr bool is-ref-wrapper = false;                              
  template<class T>
    constexpr bool is-ref-wrapper<reference_wrapper<T>> = true;
  template<class R, class T, class RQ, class TQ>
    concept ref-wrap-common-reference-exists-with =                     
      is-ref-wrapper<R> &&
      requires { typename common_reference_t<typename R::type&, TQ>; } &&
      convertible_to<RQ, common_reference_t<typename R::type&, TQ>>;
  template<class R, class T, template<class> class RQual, template<class> class TQual>
    requires (ref-wrap-common-reference-exists-with<R, T, RQual<R>, TQual<T>> &&
              !ref-wrap-common-reference-exists-with<T, R, TQual<T>, RQual<R>>)
  struct basic_common_reference<R, T, RQual, TQual> {
    using type = common_reference_t<typename R::type&, TQual<T>>;
  };
  template<class T, class R, template<class> class TQual, template<class> class RQual>
    requires (ref-wrap-common-reference-exists-with<R, T, RQual<R>, TQual<T>> &&
              !ref-wrap-common-reference-exists-with<T, R, TQual<T>, RQual<R>>)
  struct basic_common_reference<T, R, TQual, RQual> {
    using type = common_reference_t<typename R::type&, TQual<T>>;
  };
}