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); }