std::is_swappable_with, std::is_swappable, std::is_nothrow_swappable_with, std::is_nothrow_swappable — cppreference.com
Материал из cppreference.com
<tbody> </tbody>
| Определено в заголовочном файле |
||
|
|
(1) | (начиная с C++17) |
|
|
(2) | (начиная с C++17) |
|
|
(3) | (начиная с C++17) |
|
|
(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-квалификаторов или ссылочным квалификатором), предоставляет константу-элемент value, равную false. Иначе предоставляет константу-элемент value, равную std::is_swappable_with<T&, T&>::value
3) То же, что и (1), но известно, что вычисления обоих выражений из (1) не вызывают исключений
4) То же, что и (2), но использует std::is_nothrow_swappable_with.
T и U должен каждый быть полным типом, (возможно, cv-квалифицированным) void или массивом с неизвестной границей. Иначе поведение не определено.
Если реализация приведённого выше шаблона прямо или косвенно зависит от неполного типа, и эта реализация могла бы дать другой результат, если бы этот тип был гипотетически завершён, поведение не определено.
Поведение программы, добавляющей специализации для любых шаблонов, описанных на этой странице не определено.
Вспомогательные шаблоны переменных
<tbody> </tbody>
|
|
(начиная с C++17) | |
|
|
(начиная с C++17) | |
|
|
(начиная с C++17) | |
|
|
(начиная с C++17) | |
Унаследован от std::integral_constant
Константы элементы
true, если T можно обменять с U , false иначе (public static константа-элемент) |
Функции-элементы
преобразует объект в bool, возвращает value (public функция-элемент) | |
возвращает value (public функция-элемент) |
Типы элементы
| Тип | Определение |
value_type
|
bool
|
type
|
std::integral_constant<bool, value>
|
Примечание
Это свойство не проверяет ничего вне непосредственного контекста выражений обмена: если использование T или U вызовет специализацию шаблона, генерацию неявно определённых специальных функций-элементов и т.д., и в них есть ошибки, фактический обмен может не скомпилироваться, даже если std::is_swappable_with<T,U>::value компилируется и оценивается как true.