Skip to content

Commit 934a5e6

Browse files
Add RTTR_NODISCARD macro
1 parent f4c43aa commit 934a5e6

File tree

2 files changed

+19
-16
lines changed

2 files changed

+19
-16
lines changed

libs/common/include/s25util/enumUtils.h

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,9 @@
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-
2010
template<typename Enum>
2111
struct IsBitset : std::false_type
2212
{};
@@ -69,21 +59,21 @@ constexpr auto operator^=(Enum& lhs, Enum rhs) noexcept
6959

7060
namespace bitset {
7161
template<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

7868
template<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

8575
template<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
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// Copyright (C) 2005 - 2023 Settlers Freaks (sf-team at siedler25.org)
2+
//
3+
// SPDX-License-Identifier: GPL-2.0-or-later
4+
5+
#pragma once
6+
7+
#if __cplusplus >= 201703L
8+
# define RTTR_NODISCARD [[nodiscard]]
9+
#elif defined(__clang__) || defined(__GNUC__)
10+
# define RTTR_NODISCARD __attribute__((warn_unused_result))
11+
#elif defined(_Check_return_) // MSVC requires /analyze switch
12+
# define RTTR_NODISCARD _Check_return_
13+
#else
14+
# define RTTR_NODISCARD
15+
#endif

0 commit comments

Comments
 (0)