Namespaces
Variants

std::experimental::ranges:: is_swappable_with, std::experimental::ranges:: is_swappable, std::experimental::ranges:: is_nothrow_swappable_with, std::experimental::ranges:: is_nothrow_swappable

From cppreference.net
template < class T, class U >
struct is_swappable_with ;
(1) (ranges TS)
template < class T >
struct is_swappable ;
(2) (ranges TS)
template < class T, class U >
struct is_nothrow_swappable_with ;
(3) (ranges TS)
template < class T >
struct is_nothrow_swappable ;
(4) (ranges TS)
1) 若表达式 ranges:: swap ( std:: declval < T > ( ) , std:: declval < U > ( ) ) ranges:: swap ( std:: declval < U > ( ) , std:: declval < T > ( ) ) 在被作为未求值操作数处理时均格式正确,则提供等于 true 的成员常量 value 。否则 value false 访问检查 的执行环境如同与这两个类型均无关的上下文。
2) T 不是可引用类型(即可能是 cv 限定的 void 或带有 cv 限定符序列 引用限定符 的函数类型),则提供等于 false 的成员常量 value 。否则,提供等于 ranges :: is_swappable_with < T & , T & > :: value 的成员常量 value
3) (1) 相同,但已知 (1) 中两个表达式的求值均不会抛出异常。
4) (2) 相同,但使用 is_nothrow_swappable_with

T U 都应是一个完整类型,(可能是 cv 限定的) void ,或一个未知边界的数组。否则,行为是未定义的。

目录

辅助变量模板

template < class T, class U >
constexpr bool is_swappable_with_v = is_swappable_with < T, U > :: value ;
(1) (ranges TS)
template < class T >
constexpr bool is_swappable_v = is_swappable < T > :: value ;
(2) (ranges TS)
template < class T, class U >
constexpr bool is_nothrow_swappable_with_v = is_nothrow_swappable_with < T, U > :: value ;
(3) (ranges TS)
template < class T >
constexpr bool is_nothrow_swappable_v = is_nothrow_swappable < T > :: value ;
(4) (ranges TS)

继承自 std:: integral_constant

成员常量

value
[static]
T 可与 U 交换则为 true ,否则为 false
(公开静态成员常量)

成员函数

operator bool
转换对象为 bool 类型,返回 value
(公开成员函数)
operator()
(C++14)
返回 value
(公开成员函数)

成员类型

类型 定义
value_type bool
type std:: integral_constant < bool , value >

注释

该特性不会检查交换表达式直接上下文之外的任何内容:如果对 T U 的使用会触发模板特化、隐式定义的特殊成员函数生成等操作,且这些操作存在错误,那么即使 ranges::is_swappable_with<T,U>::value 能通过编译并计算为 true ,实际的交换操作可能仍无法编译。

示例

另请参阅

指定类型可交换或两种类型可相互交换
(概念)
检查某类型的对象能否与相同或不同类型的对象进行交换
(类模板)