From 7c5b1844d343de80313cab52cdf80eb9a0c8c705 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Leclercq?= Date: Fri, 19 Feb 2021 14:51:21 +0100 Subject: [PATCH] Core/Flag: Improve code --- include/Nazara/Core/Flags.hpp | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/include/Nazara/Core/Flags.hpp b/include/Nazara/Core/Flags.hpp index e87d21158..2211a9d9f 100644 --- a/include/Nazara/Core/Flags.hpp +++ b/include/Nazara/Core/Flags.hpp @@ -18,33 +18,29 @@ namespace Nz { }; + template struct IsEnumFlag : std::false_type {}; template struct IsEnumFlag::max)>> : std::true_type {}; + template - struct GetEnumAutoFlag : std::false_type - { - static constexpr bool value = true; - }; + struct GetEnumAutoFlag : std::integral_constant {}; template - struct GetEnumAutoFlag> : std::true_type - { - static constexpr bool value = T::AutoFlag; - }; + struct GetEnumAutoFlag> : std::integral_constant {}; template class Flags { - static_assert(std::is_enum::value, "Type must be an enumeration"); - static_assert(IsEnumFlag::value, "Enum has not been enabled as flags by an EnumAsFlags specialization"); + static_assert(std::is_enum_v, "Type must be an enumeration"); + static_assert(IsEnumFlag(), "Enum has not been enabled as flags by an EnumAsFlags specialization"); static_assert(std::is_same_v::max)>, E>, "EnumAsFlags field max should be of the same type as the enum"); static constexpr std::size_t MaxValue = static_cast(EnumAsFlags::max); - static constexpr bool AutoFlag = GetEnumAutoFlag::value; + static constexpr bool AutoFlag = GetEnumAutoFlag(); using BitField16 = std::conditional_t<(MaxValue >= 8), UInt16, UInt8>; using BitField32 = std::conditional_t<(MaxValue >= 16), UInt32, BitField16>;