diff options
Diffstat (limited to 'src/common/Utilities/advstd.h')
-rw-r--r-- | src/common/Utilities/advstd.h | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/common/Utilities/advstd.h b/src/common/Utilities/advstd.h index ff2717c9755..4a26e00df52 100644 --- a/src/common/Utilities/advstd.h +++ b/src/common/Utilities/advstd.h @@ -18,9 +18,38 @@ #ifndef TRINITY_ADVSTD_H #define TRINITY_ADVSTD_H +#include <version> + +#ifdef __cpp_lib_bit_cast +#include <bit> +#else +#include <cstring> // for memcpy +#endif +#include <compare> + // this namespace holds implementations of upcoming stdlib features that our c++ version doesn't have yet namespace advstd { +// libc++ is missing these two +[[nodiscard]] constexpr bool is_eq(std::partial_ordering cmp) noexcept { return cmp == 0; } +[[nodiscard]] constexpr bool is_neq(std::partial_ordering cmp) noexcept { return cmp != 0; } + +#ifdef __cpp_lib_bit_cast +using std::bit_cast; +#else +// libstdc++ v10 is missing this +template <typename To, typename From, + std::enable_if_t<std::conjunction_v< + std::bool_constant<sizeof(To) == sizeof(From)>, + std::is_trivially_copyable<To>, + std::is_trivially_copyable<From>>, int> = 0> + [[nodiscard]] constexpr To bit_cast(From const& from) noexcept +{ + To to; + std::memcpy(&to, &from, sizeof(To)); + return to; +} +#endif } #endif |