From 7e82a544171f20613e96424f539a1d452bcb2294 Mon Sep 17 00:00:00 2001 From: levlam Date: Fri, 6 Nov 2020 17:09:47 +0300 Subject: [PATCH] Fix std::is_trivially_copyable usage. --- tdutils/td/utils/AtomicRead.h | 3 ++- tdutils/td/utils/as.h | 9 ++------- tdutils/td/utils/type_traits.h | 11 +++++++++++ 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/tdutils/td/utils/AtomicRead.h b/tdutils/td/utils/AtomicRead.h index 25fa3b8d8..f64691020 100644 --- a/tdutils/td/utils/AtomicRead.h +++ b/tdutils/td/utils/AtomicRead.h @@ -8,6 +8,7 @@ #include "td/utils/common.h" #include "td/utils/port/thread.h" +#include "td/utils/type_traits.h" #include #include @@ -21,7 +22,7 @@ class AtomicRead { public: void read(T &dest) const { while (true) { - static_assert(std::is_trivially_copyable::value, "T must be trivially copyable"); + static_assert(TD_IS_TRIVIALLY_COPYABLE(T), "T must be trivially copyable"); auto version_before = version.load(); if (version_before % 2 == 0) { std::memcpy(&dest, &value, sizeof(dest)); diff --git a/tdutils/td/utils/as.h b/tdutils/td/utils/as.h index dd86fa348..43a99f626 100644 --- a/tdutils/td/utils/as.h +++ b/tdutils/td/utils/as.h @@ -6,6 +6,8 @@ // #pragma once +#include "td/utils/type_traits.h" + #include #include @@ -64,13 +66,6 @@ class ConstAs { } // namespace detail -// no std::is_trivially_copyable in libstdc++ before 5.0 -#if __GLIBCXX__ -#define TD_IS_TRIVIALLY_COPYABLE(T) __has_trivial_copy(T) -#else -#define TD_IS_TRIVIALLY_COPYABLE(T) ::std::is_trivially_copyable::value -#endif - template = 0> detail::As as(FromT *from) { diff --git a/tdutils/td/utils/type_traits.h b/tdutils/td/utils/type_traits.h index 7f68a9601..284be729b 100644 --- a/tdutils/td/utils/type_traits.h +++ b/tdutils/td/utils/type_traits.h @@ -6,6 +6,10 @@ // #pragma once +#include "td/utils/int_types.h" + +#include + namespace td { template @@ -27,4 +31,11 @@ constexpr size_t member_function_argument_count() { return member_function_class::argument_count(); } +// no std::is_trivially_copyable in libstdc++ before 5.0 +#if __GLIBCXX__ +#define TD_IS_TRIVIALLY_COPYABLE(T) __has_trivial_copy(T) +#else +#define TD_IS_TRIVIALLY_COPYABLE(T) ::std::is_trivially_copyable::value +#endif + } // namespace td