std::basic_common_reference<std::reference_wrapper>
Определён в заголовочном файле <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<typenameR::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() {}
См. также
|
(C++20) | определяет общий ссылочный тип для группы типов (шаблон класса) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/utility/functional/reference_wrapper/basic_common_reference