Namespaces
Variants

std::basic_common_reference<std::reference_wrapper>

От ru.cppreference.net
 
 
Библиотека утилит
Поддержка языка
Поддержка типов (базовые типы, RTTI)
Макросы проверки возможностей библиотеки (C++20)
Программные утилиты
Функции с переменным числом аргументов
Поддержка корутин (C++20)
Поддержка контрактов (C++26)
Трёхстороннее сравнение
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Общие утилиты
Операторы отношения (устарело в C++20)
Функции сравнения целых
(C++20)(C++20)(C++20)    
(C++20)
Обмен и операции с типами
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Общеупотребительные типы
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)



 
Функциональные объекты
Вызов функции
(C++17)(C++23)
Тождественный функциональный объект
(C++20)
Старые связыватели и адапторы
(до C++17*)
(до C++17*)
(до C++17*)
(до C++17*)
(до C++17*)(до C++17*)(до C++17*)(до C++17*)
(до C++20*)
(до C++20*)
(до C++17*)(до C++17*)
(до C++17*)(до C++17*)

(до C++17*)
(до C++17*)(до C++17*)(до C++17*)(до C++17*)
(до C++20*)
(до C++20*)
 
 
Определён в заголовке <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() {}

Смотрите также

определяет общий ссылочный тип для группы типов
(шаблон класса)