From 9576e2794d4d44a968bc2652eff5d100cb6c828c Mon Sep 17 00:00:00 2001 From: Lynix Date: Tue, 15 Oct 2019 18:09:34 +0200 Subject: [PATCH] Core/Flags: Fix bitfield type selection --- include/Nazara/Core/Flags.hpp | 6 +++--- include/Nazara/Core/Flags.inl | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/include/Nazara/Core/Flags.hpp b/include/Nazara/Core/Flags.hpp index 92c97de9e..84c201775 100644 --- a/include/Nazara/Core/Flags.hpp +++ b/include/Nazara/Core/Flags.hpp @@ -39,11 +39,11 @@ namespace Nz static constexpr std::size_t MaxValue = static_cast(EnumAsFlags::max); - using BitField16 = std::conditional_t<(MaxValue > 8), UInt16, UInt8>; - using BitField32 = std::conditional_t<(MaxValue > 16), UInt32, BitField16>; + using BitField16 = std::conditional_t<(MaxValue >= 8), UInt16, UInt8>; + using BitField32 = std::conditional_t<(MaxValue >= 16), UInt32, BitField16>; public: - using BitField = std::conditional_t<(MaxValue > 32), UInt64, BitField32>; + using BitField = std::conditional_t<(MaxValue >= 32), UInt64, BitField32>; constexpr Flags(BitField value = 0); constexpr Flags(E enumVal); diff --git a/include/Nazara/Core/Flags.inl b/include/Nazara/Core/Flags.inl index 2b57a59a8..6a27f6923 100644 --- a/include/Nazara/Core/Flags.inl +++ b/include/Nazara/Core/Flags.inl @@ -218,6 +218,7 @@ namespace Nz template constexpr typename Flags::BitField Flags::GetFlagValue(E enumValue) { + assert(enumValue < sizeof(BitField) * CHAR_BIT); return 1U << static_cast(enumValue); }