std::basic_common_reference<std::reference_wrapper>
<functional>
template<class> RQual, template<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>>)
template<class> TQual, template<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>>)
concept /*ref-wrap-common-reference-exists-with*/ =
/*is-ref-wrapper*/<R> &&
requires { typename std::common_reference_t <typename R::type&, TQ>; } &&
The common reference type of a reference_wrapper
(denoted as R) and a type T, correspondingly applied with cv and reference qualifiers (denoted as RQ and TQ respectively), is equivalent to a common reference type of underlying type of R applied with lvalue reference and the TQ.
The common reference type is defined only if R is the only reference_wrapper
, the underlying type of R applied with lvalue reference and the TQ have a common reference type to which RQ must be convertible.
The exposition-only constant /*is-ref-wrapper*/<R> is true if and only if R is a specialization of std::reference_wrapper .
Contents
[edit] Member types
[edit] Notes
Feature-test macro | Value | Std | Feature |
---|---|---|---|
__cpp_lib_common_reference_wrapper |
202302L |
(C++23) | Make std::common_reference_t of std::reference_wrapper a reference type |
[edit] Example
#include <concepts> #include <functional> static_assert(std::same_as <std::common_reference_t <int&, std::reference_wrapper <int>>, int&>); static_assert(std::same_as <std::common_reference_t <std::reference_wrapper <int>&, int&>, int&>); static_assert(std::same_as <std::common_reference_t <int&, const std::reference_wrapper <int>&>, int&>); int main() {}