Use __is_trivially_copyable if possible.

This commit is contained in:
levlam 2023-02-07 13:13:56 +03:00
parent 694378f9ab
commit a08b1f9107

View File

@ -7,6 +7,7 @@
#pragma once #pragma once
#include "td/utils/int_types.h" #include "td/utils/int_types.h"
#include "td/utils/port/platform.h"
#include <type_traits> #include <type_traits>
@ -31,9 +32,13 @@ constexpr size_t member_function_argument_count() {
return member_function_class<FunctionT>::argument_count(); return member_function_class<FunctionT>::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 __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) #define TD_IS_TRIVIALLY_COPYABLE(T) __has_trivial_copy(T)
#endif
#else #else
#define TD_IS_TRIVIALLY_COPYABLE(T) ::std::is_trivially_copyable<T>::value #define TD_IS_TRIVIALLY_COPYABLE(T) ::std::is_trivially_copyable<T>::value
#endif #endif