From a08b1f91073f745ef04ae2275623a029faccd40d Mon Sep 17 00:00:00 2001 From: levlam Date: Tue, 7 Feb 2023 13:13:56 +0300 Subject: [PATCH] Use __is_trivially_copyable if possible. --- tdutils/td/utils/type_traits.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tdutils/td/utils/type_traits.h b/tdutils/td/utils/type_traits.h index 49b215e8b..2c32beeb8 100644 --- a/tdutils/td/utils/type_traits.h +++ b/tdutils/td/utils/type_traits.h @@ -7,6 +7,7 @@ #pragma once #include "td/utils/int_types.h" +#include "td/utils/port/platform.h" #include @@ -31,9 +32,13 @@ constexpr size_t member_function_argument_count() { return member_function_class::argument_count(); } -// no std::is_trivially_copyable in libstdc++ before 5.0 +// there is no std::is_trivially_copyable in libstdc++ before 5.0 #if __GLIBCXX__ +#if TD_CLANG || (TD_GCC && __GNUC__ >= 5) // but clang >= 3.0 and g++ >= 5.0 supports __is_trivially_copyable +#define TD_IS_TRIVIALLY_COPYABLE(T) __is_trivially_copyable(T) +#else #define TD_IS_TRIVIALLY_COPYABLE(T) __has_trivial_copy(T) +#endif #else #define TD_IS_TRIVIALLY_COPYABLE(T) ::std::is_trivially_copyable::value #endif