Quick Links: |
Provide metafunction to identify swappable types. More...
bsl::is_swappable | type-traits metafunction |
bsl::is_swappable_v | the metafunction's result value |
bsl::is_swappable
, and a variable template bsl::is_swappable_v
that represents the result value of the bsl::is_swappable
metafunction, which may be used to query whether swap(x,y);
is well-formed. Note that this is only implemented for C++11 and above. bsl::is_swappable
meets the requirements of the is_swappable
template defined in the C++17 standard. is_swappable_v
is defined in the C++17 standard as an inline variable. If the current compiler supports the inline variable C++17 compiler feature, bsl::is_swappable_v
is defined as an inline constexpr bool
variable. Otherwise, if the compiler supports the variable templates C++14 compiler feature, bsl::is_swappable_v
is defined as a non-inline constexpr bool
variable. See BSLS_COMPILERFEATURES_SUPPORT_INLINE_VARIABLES
and BSLS_COMPILERFEATURES_SUPPORT_VARIABLE_TEMPLATES
macros in the bsls_compilerfeatures component for details. struct
s -- one swappable and one not. struct MyType1 { // trivial so swappable }; struct MyType2 { // private assignement, so not swappable private: // NOT IMPLEMENTED MyType2& operator=(const MyType2&); // Assignment operator made private to prevent swappability. };
bsl::is_swappable
template for each of the struct
s and assert the value
static data member of each instantiation: assert(true == bsl::is_swappable<MyType1>::value); assert(false == bsl::is_swappable<MyType2>::value);
bsl::is_swappable_v
variable as follows: #ifdef BSLS_COMPILERFEATURES_SUPPORT_VARIABLE_TEMPLATES assert(true == bsl::is_swappable_v<MyType1>); assert(false == bsl::is_swappable_v<MyType2>); #endif