diff options
| author | Morph <39850852+Morph1984@users.noreply.github.com> | 2023-03-07 22:42:19 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-03-07 22:42:19 -0500 |
| commit | db0b86aef62b4d0b0f1d01428870b93cc94ef481 (patch) | |
| tree | a5ceb18ca49f21fa1c8dc4872b6f7b154fd73ca6 /src | |
| parent | 822a967bca88329dc47dcb33f26af9d60dbc9a9a (diff) | |
| parent | 242691d87177a4ddd1f34436a6273dd66d13d060 (diff) | |
Merge pull request #9920 from liamwhite/constexpr-bit-cast
common: make BitCast constexpr
Diffstat (limited to 'src')
| -rw-r--r-- | src/common/bit_cast.h | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/src/common/bit_cast.h b/src/common/bit_cast.h index 535148b4dc..c6110c5426 100644 --- a/src/common/bit_cast.h +++ b/src/common/bit_cast.h @@ -3,19 +3,21 @@ #pragma once -#include <cstring> -#include <type_traits> +#include <version> + +#ifdef __cpp_lib_bit_cast +#include <bit> +#endif namespace Common { template <typename To, typename From> -[[nodiscard]] std::enable_if_t<sizeof(To) == sizeof(From) && std::is_trivially_copyable_v<From> && - std::is_trivially_copyable_v<To>, - To> -BitCast(const From& src) noexcept { - To dst; - std::memcpy(&dst, &src, sizeof(To)); - return dst; +constexpr inline To BitCast(const From& from) { +#ifdef __cpp_lib_bit_cast + return std::bit_cast<To>(from); +#else + return __builtin_bit_cast(To, from); +#endif } } // namespace Common |
