Spec-Zone.ru › C++

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

Определено в заголовочном файле <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. Проверки доступа выполняются так, как если бы они происходили из контекста, не связанного ни с одним из типов.
2) Если T не является ссылочным типом (т.е., возможно, с квалификаторами cv void или типом функции с cv-qualifier-seq или ref-qualifier), предоставляет статическую константу-член value со значением false. В противном случае, предоставляет статическую константу-член value со значением std::is_swappable_with<T&, T&>::value.
3) Аналогично (1), но известно, что вычисления обоих выражений из (1) не вызовут исключений.
4) Аналогично (2), но использует std::is_nothrow_swappable_with.

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.

Пример

См. также

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

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/types/is_swappable

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API