From 64c16ded9b79e3b64edde35891dd77418d00b102 Mon Sep 17 00:00:00 2001 From: Rory Shu Date: Thu, 27 Jun 2024 04:20:49 -0700 Subject: [PATCH] test fix --- libredex/StlUtil.h | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/libredex/StlUtil.h b/libredex/StlUtil.h index cc809c94679..52b0f890ea9 100644 --- a/libredex/StlUtil.h +++ b/libredex/StlUtil.h @@ -8,6 +8,7 @@ #pragma once #include +#include #include #include @@ -45,9 +46,22 @@ size_t erase_if(Container& c, const Pred& pred) { return removed; } -template -constexpr To bit_cast(const From& from) noexcept { - return __builtin_bit_cast(To, from); +template +std::enable_if_t< + sizeof(To) == sizeof(From) && + std::is_trivially_copyable_v && + std::is_trivially_copyable_v, + To> +// constexpr support needs compiler magic +bit_cast(const From& src) noexcept +{ + static_assert(std::is_trivially_constructible_v, + "This implementation additionally requires " + "destination type to be trivially constructible"); + + To dst; + std::memcpy(&dst, &src, sizeof(To)); + return dst; } } // namespace std20