Namespaces
Variants

std:: is_swappable_with, std:: is_swappable, std:: is_nothrow_swappable_with, std:: is_nothrow_swappable

From cppreference.net
Metaprogramming library
Type traits
Type categories
(C++11)
(C++11) ( DR* )
Type properties
(C++11)
(C++11)
(C++14)
(C++11) (deprecated in C++26)
(C++11) ( until C++20* )
(C++11) (deprecated in C++20)
(C++11)
Type trait constants
Metafunctions
(C++17)
Supported operations
is_swappable_with is_swappable is_nothrow_swappable_with is_nothrow_swappable
(C++17) (C++17) (C++17) (C++17)

Relationships and property queries
Type modifications
Type transformations
(C++11) (deprecated in C++23)
(C++11) (deprecated in C++23)
(C++11)
(C++11) ( until C++20* ) (C++17)

Compile-time rational arithmetic
Compile-time integer sequences
Определено в заголовке <type_traits>
template < class T, class U >
struct is_swappable_with ;
(1) (начиная с C++17)
template < class T >
struct is_swappable ;
(2) (начиная с C++17)
template < class T, class U >
struct is_nothrow_swappable_with ;
(3) (начиная с C++17)
template < class T >
struct is_nothrow_swappable ;
(4) (начиная с C++17)
1) Если выражения swap ( std:: declval < T > ( ) , std:: declval < U > ( ) ) и swap ( std:: declval < U > ( ) , std:: declval < T > ( ) ) являются корректными в невычисляемом контексте после using std:: swap ; (см. Swappable ), предоставляет константу-член value равную true . В противном случае value равна false .
Access checks выполняются так, как если бы они происходили из контекста, не связанного ни с одним из типов.
3) То же, что и (1) , но известно, что вычисления обоих выражений из (1) не вызывают исключений.
Тип-признак Значение константы-члена value
T является ссылаемым типом T не является ссылаемым типом
(2) std :: is_swappable_with < T & , T & > :: value false
(4) std :: is_nothrow_swappable_with < T & , T & > :: value

Если T или U не являются полными типами, (возможно cv-квалифицированным) void , или массивом неизвестной границы, поведение не определено.

Если создание экземпляра шаблона выше зависит, прямо или косвенно, от неполного типа, и это создание экземпляра может дать другой результат, если бы этот тип был гипотетически завершен, поведение не определено.

Если программа добавляет специализации для любых шаблонов, описанных на этой странице, поведение не определено.

Содержание

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

template < class T, class U >
inline constexpr bool is_swappable_with_v = is_swappable_with < T, U > :: value ;
(начиная с C++17)
template < class T >
inline constexpr bool is_swappable_v = is_swappable < T > :: value ;
(начиная с C++17)
template < class T, class U >

inline constexpr bool is_nothrow_swappable_with_v =

is_nothrow_swappable_with < T, U > :: value ;
(начиная с C++17)
template < class T >

inline constexpr bool is_nothrow_swappable_v =

is_nothrow_swappable < T > :: value ;
(начиная с C++17)

Наследуется от 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 >

Примечания

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

Пример

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

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