std::is_swappable_with
STD::是[医]可互换[医]With,STD::is[医]可交换的,std::is[医]无抛[医]可互换[医]With,STD::is[医]无抛[医]可互换
Defined in header | | |
---|---|---|
template< class T, class U > struct is_swappable_with; | (1) | (since C++17) |
template< class T > struct is_swappable; | (2) | (since C++17) |
template< class T, class U > struct is_nothrow_swappable_with; | (3) | (since C++17) |
template< class T > struct is_nothrow_swappable; | (4) | (since C++17) |
1%29如swap(std::declval<T>(),std::declval<U>())和swap(std::declval<U>(),std::declval<T>())之后的未评估上下文中都有良好的格式。usingstd::swap;28%见Swappable%29,提供成员常量。value平等true.否则,value是false...存取检查执行时,就好像是从与任何类型无关的上下文中执行的。
2%29T不是可引用的类型%28i。E.,可能是cv-符合条件的void类的函数类型。简历-限定符-seq或者是参-限定符%29,提供成员常量。value等于false否则,提供成员常量。value等于std::is_swappable_with<T&, T&>::value
3%29与%281%29相同,但对%281%29的两个表达式的计算都不引发异常。
4%29与%282%29相同,但使用is_nothrow_swappable_with
...
T
和U
每一个都是一个完整的类型,%28可能是cv-合格%29void
,或者一系列未知的界限。否则,行为就没有定义。
辅助变量模板
template | | (since C++17) |
---|---|---|
template <class T> inline constexpr bool is_swappable_v = is_swappable<T>::value; | | (since C++17) |
template <class T, class U> inline constexpr bool is_nothrow_swappable_with_v = is_nothrow_swappable_with<T, U>::value; | | (since C++17) |
template <class T> inline constexpr bool is_nothrow_swappable_v = is_nothrow_swappable<T>::value; | | (since C++17) |
继承自STD:积分[医]常量
成员常数
value static | true if T is swappable with U , false otherwise (public static member constant) |
---|
成员函数
operator bool | converts the object to bool, returns value (public member function) |
---|---|
operator() (C++14) | returns value (public member function) |
成员类型
Type | Definition |
---|---|
value_type | bool |
type | std::integral_constant<bool, value> |
注记
此特性不检查交换表达式的直接上下文之外的任何内容:如果使用T或U将触发模板的专门化,生成隐式定义的特殊成员函数等,并且这些函数都有错误,即使在以下情况下,实际的交换可能也不会编译。std::is_swappable_with<T,U>::value编译并计算为true...
例
另见
swap | swaps the values of two objects (function template) |
---|---|
is_move_assignableis_trivially_move_assignableis_nothrow_move_assignable (C++11)(C++11)(C++11) | checks if a type has a move assignment operator (class template) |
© cppreference.com
在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。