From d1841356bfff2b1404a4a6e44898bb17c9457fff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Leclercq?= Date: Wed, 29 Dec 2021 14:35:26 +0100 Subject: [PATCH] Core/Algorithm: Improve AccessByOffset check and add error message --- include/Nazara/Core/Algorithm.inl | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/include/Nazara/Core/Algorithm.inl b/include/Nazara/Core/Algorithm.inl index 600d44825..e238c73e7 100644 --- a/include/Nazara/Core/Algorithm.inl +++ b/include/Nazara/Core/Algorithm.inl @@ -49,12 +49,12 @@ namespace Nz template decltype(auto) AccessByOffset(void* basePtr, std::size_t offset) { - static_assert((std::is_reference_v && !std::is_rvalue_reference_v) || std::is_pointer_v); - - if constexpr (std::is_reference_v) + if constexpr (std::is_lvalue_reference_v) return *reinterpret_cast*>(static_cast(basePtr) + offset); - else + else if constexpr (std::is_pointer_v) return reinterpret_cast(static_cast(basePtr) + offset); + else + static_assert(AlwaysFalse(), "AccessByOffset requires a reference or pointer type"); } /*! @@ -68,12 +68,14 @@ namespace Nz template decltype(auto) AccessByOffset(const void* basePtr, std::size_t offset) { - static_assert((std::is_reference_v && !std::is_rvalue_reference_v) || std::is_pointer_v); + static_assert(std::is_lvalue_reference_v || std::is_pointer_v); - if constexpr (std::is_reference_v) + if constexpr (std::is_lvalue_reference_v) return *reinterpret_cast*>(static_cast(basePtr) + offset); - else + else if constexpr (std::is_pointer_v) return reinterpret_cast(static_cast(basePtr) + offset); + else + static_assert(AlwaysFalse(), "AccessByOffset requires a reference or pointer type"); } /*!