8#ifndef INCLUDED_BSLMF_ISSWAPPABLE
9#define INCLUDED_BSLMF_ISSWAPPABLE
113#include <bslscm_version.h>
132#ifdef BSLS_COMPILERFEATURES_SUPPORT_TRAITS_HEADER
133# include <type_traits>
137#if !defined(BSLS_LIBRARYFEATURES_HAS_CPP17_BASELINE_LIBRARY) && \
138 !defined(BSLS_PLATFORM_CMP_MSVC) && \
139 defined(BSLS_COMPILERFEATURES_SUPPORT_CONSTEXPR) && \
140 defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT) && \
141 defined(BSLS_COMPILERFEATURES_SUPPORT_DECLTYPE)
144namespace bslmf_is_swappable_impl_ns {
149template <
class TYPE,
class =
void>
150struct IsSwappable_Impl;
165#if defined(BSLS_LIBRARYFEATURES_HAS_CPP17_BASELINE_LIBRARY)
167using std::is_swappable;
168using std::is_swappable_v;
171#elif defined(BSLS_PLATFORM_CMP_MSVC)
183constexpr bool is_swappable_v = is_swappable<TYPE>::value;
188#elif defined(BSLS_COMPILERFEATURES_SUPPORT_CONSTEXPR) \
189 && defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT) \
190 && defined(BSLS_COMPILERFEATURES_SUPPORT_DECLTYPE)
196 : BloombergLP::bslmf::bslmf_is_swappable_impl_ns::IsSwappable_Impl<TYPE> {
207# ifdef BSLS_COMPILERFEATURES_SUPPORT_VARIABLE_TEMPLATES
210constexpr bool is_swappable_v = is_swappable<TYPE>::value;
224#if defined(BSLS_COMPILERFEATURES_FULL_CPP11) && \
225 !defined(BSLS_LIBRARYFEATURES_HAS_CPP17_BASELINE_LIBRARY) && \
226 !defined(BSLS_PLATFORM_CMP_MSVC)
229namespace bslmf_is_swappable_impl_ns
237template <
class TYPE,
class>
238struct IsSwappable_Impl
246struct IsSwappable_Impl<TYPE,
249 BloombergLP::bslmf::Util::declval<TYPE&>())))>
#define BSLMF_VOIDTYPE(ARG)
Definition bslmf_voidtype.h:343
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
#define BSLS_KEYWORD_INLINE_VARIABLE
Definition bsls_keyword.h:665
void swap(OptionValue &a, OptionValue &b)
Definition bdlat_valuetypefunctions.h:939
Definition bdlbb_blob.h:579
Definition bslmf_integralconstant.h:261
static BSLS_KEYWORD_CONSTEXPR bsl::add_lvalue_reference< t_TYPE >::type declval() BSLS_KEYWORD_NOEXCEPT