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"); } /*!