diff options
Diffstat (limited to 'src/utils')
-rw-r--r-- | src/utils/cpp/atomic.hpp | 13 | ||||
-rw-r--r-- | src/utils/cpp/type_safe_arithmetic.hpp | 2 |
2 files changed, 10 insertions, 5 deletions
diff --git a/src/utils/cpp/atomic.hpp b/src/utils/cpp/atomic.hpp index 4ef7e40c..b610a350 100644 --- a/src/utils/cpp/atomic.hpp +++ b/src/utils/cpp/atomic.hpp @@ -18,6 +18,7 @@ #include <atomic> #include <condition_variable> #include <shared_mutex> +#include <type_traits> #include <utility> // std::move // Atomic wrapper with notify/wait capabilities. @@ -51,22 +52,26 @@ class atomic { return value_.load(order); } - template <class U = T, class = std::enable_if_t<std::is_integral_v<U>>> + template <class U = T> + requires(std::is_integral_v<U>) auto operator++() -> T { std::shared_lock lock(mutex_); return ++value_; } - template <class U = T, class = std::enable_if_t<std::is_integral_v<U>>> + template <class U = T> + requires(std::is_integral_v<U>) [[nodiscard]] auto operator++(int) -> T { std::shared_lock lock(mutex_); return value_++; } - template <class U = T, class = std::enable_if_t<std::is_integral_v<U>>> + template <class U = T> + requires(std::is_integral_v<U>) auto operator--() -> T { std::shared_lock lock(mutex_); return --value_; } - template <class U = T, class = std::enable_if_t<std::is_integral_v<U>>> + template <class U = T> + requires(std::is_integral_v<U>) [[nodiscard]] auto operator--(int) -> T { std::shared_lock lock(mutex_); return value_--; diff --git a/src/utils/cpp/type_safe_arithmetic.hpp b/src/utils/cpp/type_safe_arithmetic.hpp index be2ca405..690e9a86 100644 --- a/src/utils/cpp/type_safe_arithmetic.hpp +++ b/src/utils/cpp/type_safe_arithmetic.hpp @@ -30,7 +30,7 @@ template <typename T, T MAX_VALUE = std::numeric_limits<T>::max(), T SMALLEST_VALUE = std::numeric_limits<T>::min()> struct type_safe_arithmetic_tag { - static_assert(std::is_arithmetic<T>::value, + static_assert(std::is_arithmetic_v<T>, "T must be an arithmetic type (integer or floating-point)"); using value_t = T; |