std::basic_common_reference<std::reference_wrapper>
От ru.cppreference.net
| Определён в заголовке <functional>
|
||
template< class R, class T,
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>>)
struct basic_common_reference<R, T, RQual, TQual>;
|
(1) | (начиная с C++23) |
template< class T, class 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>>)
struct basic_common_reference<T, R, TQual, RQual>;
|
(2) | (начиная с C++23) |
| Вспомогательные концепты |
||
template< class R, class T, class RQ, class TQ >
concept /*ref-wrap-common-reference-exists-with*/ =
/*is-ref-wrapper*/<R> &&
requires { typename std::common_reference_t<typename R::type&, TQ>; } &&
std::convertible<RQ, std::common_reference_t<typename R::type&, TQ>>;
|
(3) | (только для пояснения*) |
Общий ссылочный тип для reference_wrapper (обозначаемого как R) и типа T, с соответствующим применёнными cv и ссылочными квалификаторами (обозначаемых как RQ и TQ соответственно), эквивалентен общему ссылочному типу базового типа R, применённого с lvalue-ссылкой, и TQ.
Общий ссылочный тип определён только в том случае, если R является единственным reference_wrapper, базовый тип R, применённый с lvalue-ссылкой, и TQ имеют общий ссылочный тип, к которому RQ должен быть преобразуем.
Константа, используемая только для пояснения, /*is-ref-wrapper*/<R> равна true тогда и только тогда, когда R является специализацией std::reference_wrapper.
Типы членов
| Тип члена | Определение |
type
|
std:: common_reference_t < typename R :: type & , TQual < T >> ( 1,2 ) |
Примечания
| Макрос тестирования возможностей | Значение | Стандарт | Функция |
|---|---|---|---|
__cpp_lib_common_reference_wrapper
|
202302L
|
(C++23) | Сделать std::common_reference_t для std::reference_wrapper ссылочным типом |
Пример
Запустить этот код
#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() {}
Смотрите также
|
определяет общий ссылочный тип для группы типов
(шаблон класса) |