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) |
swap(std::declval<T>(), std::declval<U>()) и swap(std::declval<U>(), std::declval<T>()) оба являются допустимыми в контексте, не подлежащем вычислению, после using std::swap; (см. Swappable), предоставляет статическую константу-член value со значением true. В противном случае, value равно false. Проверки доступа выполняются так, как если бы они происходили из контекста, не связанного ни с одним из типов. T не является ссылочным типом (т.е., возможно, с квалификаторами cv void или типом функции с cv-qualifier-seq или ref-qualifier), предоставляет статическую константу-член value со значением false. В противном случае, предоставляет статическую константу-член value со значением std::is_swappable_with<T&, T&>::value. 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.
Пример
См. также
| меняет значения двух объектов (шаблон функции) |
|
|
(C++11)(C++11)(C++11) |
проверяет, есть ли у типа оператор перемещающего присваивания (шаблон класса) |
|
(C++20) |
определяет, может ли тип быть поменян местами или два типа могут быть поменяны местами (концепт) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/types/is_swappable