diff options
Diffstat (limited to 'src/utils/cpp/atomic.hpp')
-rw-r--r-- | src/utils/cpp/atomic.hpp | 13 |
1 files changed, 9 insertions, 4 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_--; |