8#ifndef INCLUDED_BSLMF_ISNOTHROWMOVECONSTRUCTIBLE
9#define INCLUDED_BSLMF_ISNOTHROWMOVECONSTRUCTIBLE
76#include <bslscm_version.h>
93#ifdef BSLS_COMPILERFEATURES_SUPPORT_TRAITS_HEADER
94# include <type_traits>
97#ifndef BDE_DONT_ALLOW_TRANSITIVE_INCLUDES
103template <
class t_TYPE>
104struct is_nothrow_move_constructible;
128#define STD_IS_NOTHROW_MOVE_CONSTRUCTIBLE_VALUE(t_TYPE) \
129 (bsl::is_array<t_TYPE>::value \
131 : ::std::is_nothrow_move_constructible<t_TYPE>::value)
140#if defined(BSLS_PLATFORM_CMP_SUN) && \
141 (BSLS_PLATFORM_CMP_VERSION == 0x5150) && \
142 (BSLS_COMPILERFEATURES_CPLUSPLUS == 199711L)
145#define BSLMF_ISNOTHROWMOVECONSTRUCTIBLE_VOIDTYPE(t_TYPE) \
146 typename bsl::enable_if<!bsl::is_const<t_TYPE>::value && \
147 !bsl::is_volatile<t_TYPE>::value, \
148 BSLMF_VOIDTYPE(int t_TYPE::*)>::type
150#define BSLMF_ISNOTHROWMOVECONSTRUCTIBLE_VOIDTYPE(t_TYPE) \
151 BSLMF_VOIDTYPE(int t_TYPE::*)
154#if defined(BSLS_COMPILERFEATURES_SUPPORT_TRAITS_HEADER)
160template <
class t_TYPE,
class =
void>
161struct IsNothrowMoveConstructible_Impl
163 STD_IS_NOTHROW_MOVE_CONSTRUCTIBLE_VALUE(t_TYPE)> {
172template <
class t_TYPE>
173struct IsNothrowMoveConstructible_Impl<
178 STD_IS_NOTHROW_MOVE_CONSTRUCTIBLE_VALUE(t_TYPE) ||
179 bslmf::IsBitwiseCopyable<t_TYPE>::value ||
180 DetectNestedTrait<t_TYPE,
181 bsl::is_nothrow_move_constructible>::value> {
183 enum { k_CHECK_COMPLETE =
sizeof(t_TYPE) };
186template <
class t_TYPE>
187struct IsNothrowMoveConstructible_Impl<
192 STD_IS_NOTHROW_MOVE_CONSTRUCTIBLE_VALUE(const t_TYPE) ||
193 bslmf::IsBitwiseCopyable<t_TYPE>::value> {
194 enum { k_CHECK_COMPLETE =
sizeof(t_TYPE) };
197template <
class t_TYPE>
198struct IsNothrowMoveConstructible_Impl<
203 STD_IS_NOTHROW_MOVE_CONSTRUCTIBLE_VALUE(volatile t_TYPE)> {
204 enum { k_CHECK_COMPLETE =
sizeof(t_TYPE) };
207template <
class t_TYPE>
208struct IsNothrowMoveConstructible_Impl<
209 const volatile t_TYPE,
213 STD_IS_NOTHROW_MOVE_CONSTRUCTIBLE_VALUE(const volatile t_TYPE)> {
214 enum { k_CHECK_COMPLETE =
sizeof(t_TYPE) };
225#undef STD_IS_NOTHROW_MOVE_CONSTRUCTIBLE_VALUE
235template <
class t_TYPE,
class =
void>
246template <
class t_TYPE>
252 bslmf::IsBitwiseCopyable<t_TYPE>::value ||
253 DetectNestedTrait<t_TYPE,
254 bsl::is_nothrow_move_constructible>::value> {
256 enum { k_CHECK_COMPLETE =
sizeof(t_TYPE) };
259template <
class t_TYPE>
264 enum { k_CHECK_COMPLETE =
sizeof(t_TYPE) };
267template <
class t_TYPE>
271 enum { k_CHECK_COMPLETE =
sizeof(t_TYPE) };
274template <
class t_TYPE>
276 const volatile t_TYPE,
278 enum { k_CHECK_COMPLETE =
sizeof(t_TYPE) };
288#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES)
289template <
class t_TYPE>
290struct IsNothrowMoveConstructible_Impl<t_TYPE&&> :
bsl::true_type {
293template <
class t_TYPE>
299template <
class t_TYPE>
302template <
class t_TYPE>
305template <
class t_TYPE>
308template <
class t_TYPE>
312template <
class t_TYPE,
size_t t_LEN>
315template <
class t_TYPE,
size_t t_LEN>
318template <
class t_TYPE,
size_t t_LEN>
322template <
class t_TYPE,
size_t t_LEN>
359template <
class t_TYPE>
361: BloombergLP::bslmf::IsNothrowMoveConstructible_Impl<t_TYPE>::type {
364#ifdef BSLS_COMPILERFEATURES_SUPPORT_VARIABLE_TEMPLATES
367template <
class t_TYPE>
#define BSLMF_ISNOTHROWMOVECONSTRUCTIBLE_VOIDTYPE(t_TYPE)
Definition bslmf_isnothrowmoveconstructible.h:150
#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
Definition bdlat_valuetypefunctions.h:939
Definition bdlbb_blob.h:579
Definition bslmf_integralconstant.h:261
Definition bslmf_isnothrowmoveconstructible.h:361
Definition bslmf_isbitwisecopyable.h:298
Definition bslmf_isnothrowmoveconstructible.h:237