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-квалификаторов или ссылочным квалификатором), предоставляет константу-элемент value, равную false. Иначе предоставляет константу-элемент value, равную std::is_swappable_with<T&, T&>::valuestd::is_nothrow_swappable_with.T и U должен каждый быть полным типом, (возможно, cv-квалифицированным) void или массивом с неизвестной границей. Иначе поведение не определено.
Если реализация приведённого выше шаблона прямо или косвенно зависит от неполного типа, и эта реализация могла бы дать другой результат, если бы этот тип был гипотетически завершён, поведение не определено.
Поведение программы, добавляющей специализации для любых шаблонов, описанных на этой странице не определено.
Вспомогательные шаблоны переменных
<tbody> </tbody> 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 иначе (public static константа-элемент) |
Функции-элементы
operator bool |
преобразует объект в bool, возвращает value (public функция-элемент) |
operator() (C++14) |
возвращает value (public функция-элемент) |
Типы элементы
| Тип | Определение |
value_type
|
bool
|
type
|
std::integral_constant<bool, value>
|
Примечание
Это свойство не проверяет ничего вне непосредственного контекста выражений обмена: если использование T или U вызовет специализацию шаблона, генерацию неявно определённых специальных функций-элементов и т.д., и в них есть ошибки, фактический обмен может не скомпилироваться, даже если std::is_swappable_with<T,U>::value компилируется и оценивается как true.
Пример
| Этот раздел не завершён Причина: нет примера |
Смотрите также
| меняет местами значения двух объектов (шаблон функции) | |
(C++11)(C++11)(C++11) |
проверяет, есть ли у типа оператор присваивания перемещением (шаблон класса) |
(C++20) |
указывает, что тип можно обменять или что два типа можно обменять друг с другом (концепт) |