8#ifndef INCLUDED_BSLMF_ISTRIVIALLYCOPYABLE
9#define INCLUDED_BSLMF_ISTRIVIALLYCOPYABLE
165#include <bslscm_version.h>
179#ifndef BDE_DONT_ALLOW_TRANSITIVE_INCLUDES
185#ifdef BSLS_COMPILERFEATURES_SUPPORT_TRAITS_HEADER
186# include <type_traits>
189#ifndef BDE_DONT_ALLOW_TRANSITIVE_INCLUDES
193#ifdef BSLS_COMPILERFEATURES_SUPPORT_TRAITS_HEADER
194#define BSLMF_ISTRIVIALLYCOPYABLE_NATIVE_IMPLEMENTATION
202#if (defined(BSLS_PLATFORM_CMP_GNU) && BSLS_PLATFORM_CMP_VERSION < 50000)
203# undef BSLMF_ISTRIVIALLYCOPYABLE_NATIVE_IMPLEMENTATION
210template <
class t_TYPE>
211struct is_trivially_copyable;
213#ifdef BSLS_COMPILERFEATURES_SUPPORT_VARIABLE_TEMPLATES
216template <
class t_TYPE>
218 is_trivially_copyable<t_TYPE>::value;
225namespace bsls {
class TimeInterval; }
241template <
class t_TYPE,
bool t_K_INTRINSIC = false>
248template <
class t_TYPE>
252#ifdef BSLMF_ISTRIVIALLYCOPYABLE_NATIVE_IMPLEMENTATION
255template <
class t_TYPE>
259 ::std::is_trivially_copyable<t_TYPE>::value>::type {
265template <
class t_TYPE>
269 bsl::is_fundamental<t_TYPE>::value || bsl::is_enum<t_TYPE>::value ||
270 bsl::is_pointer<t_TYPE>::value ||
271 bsl::is_member_pointer<t_TYPE>::value>::type {
281#if defined(BSLS_PLATFORM_CMP_SUN) && BSLS_PLATFORM_CMP_VERSION < 0x5130
292template <
class NON_CV_TYPE,
class =
void>
293struct IsTriviallyCopyable_Solaris
297template <
class NON_CV_TYPE>
298struct IsTriviallyCopyable_Solaris<NON_CV_TYPE,
BSLMF_VOIDTYPE(NON_CV_TYPE[])>
322template <
class t_TYPE>
324: BloombergLP::bslmf::IsTriviallyCopyable_Intrinsic<t_TYPE>::type {
329template <
class t_TYPE>
333#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES)
336template <
class t_TYPE>
341#if defined(BSLS_PLATFORM_CMP_SUN) && BSLS_PLATFORM_CMP_VERSION < 0x5130
352template <
class t_TYPE>
353struct is_trivially_copyable<const t_TYPE>
354: BloombergLP::bslmf::IsTriviallyCopyable_Solaris<t_TYPE>::type {
359template <
class t_TYPE>
360struct is_trivially_copyable<volatile t_TYPE>
361: BloombergLP::bslmf::IsTriviallyCopyable_Solaris<t_TYPE>::type {
366template <
class t_TYPE>
367struct is_trivially_copyable<const volatile t_TYPE>
368: BloombergLP::bslmf::IsTriviallyCopyable_Solaris<t_TYPE>::type {
373template <
class t_TYPE>
380template <
class t_TYPE>
387template <
class t_TYPE>
395template <
class t_TYPE,
size_t t_LEN>
402template <
class t_TYPE,
size_t t_LEN>
409template <
class t_TYPE,
size_t t_LEN>
416template <
class t_TYPE,
size_t t_LEN>
421#if !defined(BSLS_PLATFORM_CMP_IBM)
427template <
class t_TYPE>
433template <
class t_TYPE>
440template <
class t_TYPE>
447template <
class t_TYPE>
473#ifndef BSLMF_ISTRIVIALLYCOPYABLE_NATIVE_IMPLEMENTATION
489template <
class t_TYPE>
492#if defined(BSLS_COMPILERFEATURES_SUPPORT_STATIC_ASSERT) && \
493 defined(BSLMF_ISTRIVIALLYCOPYABLE_NATIVE_IMPLEMENTATION)
498 std::is_trivially_copyable<t_TYPE>::value,
499 "Types with copy constructors or destructors defined "
500 "or deleted may be declared 'bslmf::IsBitwiseCopyable', "
501 "if the type author is certain that using 'memcpy' on "
502 "the type is safe. Declaring such types"
503 " 'bsl::is_trivially_copyable' is, however, prohibited.");
Definition bsls_timeinterval.h:307
#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
Definition bdlat_valuetypefunctions.h:939
Definition bdlbb_blob.h:579
Definition bdlt_iso8601util.h:707
Definition bslmf_istriviallycopyable.h:324
Definition bslmf_detectnestedtrait.h:467
Definition bslmf_istriviallycopyable.h:490
Definition bslmf_istriviallycopyable.h:243
Definition bslmf_istriviallycopyable.h:271
Definition bslmf_nil.h:133