Namespaces
Variants

std::experimental::ranges:: is_swappable_with, std::experimental::ranges:: is_swappable, std::experimental::ranges:: is_nothrow_swappable_with, std::experimental::ranges:: is_nothrow_swappable

From cppreference.net
Определено в заголовочном файле <experimental/ranges/type_traits>
template < class T, class U >
struct is_swappable_with ;
(1) (ranges TS)
template < class T >
struct is_swappable ;
(2) (ranges TS)
template < class T, class U >
struct is_nothrow_swappable_with ;
(3) (ranges TS)
template < class T >
struct is_nothrow_swappable ;
(4) (ranges TS)
1) Если выражения ranges:: swap ( std:: declval < T > ( ) , std:: declval < U > ( ) ) и ranges:: swap ( std:: declval < U > ( ) , std:: declval < T > ( ) ) оба являются корректными при рассмотрении как невычисляемые операнды, предоставляет константу-член value равную true . В противном случае value равна false . Проверки доступа выполняются так, как если бы они производились из контекста, не связанного ни с одним из типов.
2) Если T не является ссылочным типом (т.е., возможно cv-квалифицированный void или тип функции с cv-qualifier-seq или ref-qualifier ), предоставляет константу-член value равную false . В противном случае, предоставляет константу-член value равную ranges :: is_swappable_with < T & , T & > :: value .
3) То же, что и (1) , но известно, что вычисления обоих выражений из (1) не вызывают исключений.
4) То же, что и (2) , но использует is_nothrow_swappable_with .

T и U должны быть полными типами, (возможно, с cv-квалификаторами) void , или массивами неизвестной границы. В противном случае поведение не определено.

Содержание

Вспомогательные шаблоны переменных

template < class T, class U >
constexpr bool is_swappable_with_v = is_swappable_with < T, U > :: value ;
(1) (ranges TS)
template < class T >
constexpr bool is_swappable_v = is_swappable < T > :: value ;
(2) (ranges TS)
template < class T, class U >
constexpr bool is_nothrow_swappable_with_v = is_nothrow_swappable_with < T, U > :: value ;
(3) (ranges TS)
template < class T >
constexpr bool is_nothrow_swappable_v = is_nothrow_swappable < T > :: value ;
(4) (ranges TS)
**Примечания:** - Весь код C++ внутри тегов ` ` сохранен без изменений - HTML-теги и атрибуты не переведены - Сохранена оригинальная структура и форматирование таблицы - Номера версий (1)-(4) и технические спецификации (ranges TS) оставлены без перевода как технические обозначения

Наследуется от std:: integral_constant

Константы-члены

value
[static]
true если T можно обменивать с U , false в противном случае
(публичная статическая константа-член)

Функции-члены

operator bool
преобразует объект в bool , возвращает value
(публичная функция-член)
operator()
(C++14)
возвращает value
(публичная функция-член)

Типы-члены

Тип Определение
value_type bool
type std:: integral_constant < bool , value >

Примечания

Этот признак не проверяет ничего за пределами непосредственного контекста выражений обмена: если использование T или U вызовет специализации шаблонов, генерацию неявно определенных специальных функций-членов и т.д., и в них есть ошибки, фактический обмен может не скомпилироваться, даже если ranges::is_swappable_with<T,U>::value компилируется и вычисляется как true .

Пример

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

определяет, что тип может быть обменян или что два типа могут быть обменены друг с другом
(концепт)
проверяет, могут ли объекты типа быть обменены с объектами того же или другого типа
(шаблон класса)