44
55#pragma once
66
7+ #include " macros.h"
78#include < type_traits>
89
9- // TODO Find a better home; could be useful elsewhere
10- #if __cplusplus >= 201703L
11- # define ENUM_UTILS_NODISCARD [[nodiscard]]
12- #elif defined(__clang__) || defined(__GNUC__)
13- # define ENUM_UTILS_NODISCARD __attribute__ ((warn_unused_result))
14- #elif defined(_MSC_VER)
15- # define ENUM_UTILS_NODISCARD _Check_return_
16- #else
17- # define ENUM_UTILS_NODISCARD
18- #endif
19-
2010template <typename Enum>
2111struct IsBitset : std::false_type
2212{};
@@ -69,21 +59,21 @@ constexpr auto operator^=(Enum& lhs, Enum rhs) noexcept
6959
7060namespace bitset {
7161template <typename Enum, std::enable_if_t <IsValidBitset<Enum>::value, int > = 0 >
72- ENUM_UTILS_NODISCARD constexpr Enum clear (Enum val, Enum flag)
62+ RTTR_NODISCARD constexpr Enum clear (Enum val, Enum flag)
7363{
7464 using Int = std::underlying_type_t <Enum>;
7565 return val & Enum (~static_cast <Int>(flag));
7666}
7767
7868template <typename Enum, std::enable_if_t <IsValidBitset<Enum>::value, int > = 0 >
79- ENUM_UTILS_NODISCARD constexpr Enum set (Enum val, Enum flag, bool state = true )
69+ RTTR_NODISCARD constexpr Enum set (Enum val, Enum flag, bool state = true )
8070{
8171 using Int = std::underlying_type_t <Enum>;
8272 return state ? (val | flag) : (val & Enum (~static_cast <Int>(flag)));
8373}
8474
8575template <typename Enum, std::enable_if_t <IsValidBitset<Enum>::value, int > = 0 >
86- ENUM_UTILS_NODISCARD constexpr Enum toggle (Enum val, Enum flag)
76+ RTTR_NODISCARD constexpr Enum toggle (Enum val, Enum flag)
8777{
8878 return val ^ flag;
8979}
@@ -103,5 +93,3 @@ constexpr bool isSet(Enum val, Enum flag)
10393 /* NOLINTNEXTLINE(bugprone-macro-parentheses) */ \
10494 static_assert (std::is_unsigned<std::underlying_type_t <Type>>::value, \
10595 #Type " must use unsigned type as the underlying type" )
106-
107- #undef ENUM_UTILS_NODISCARD
0 commit comments