summaryrefslogtreecommitdiff
path: root/src/utils/cpp/atomic.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/utils/cpp/atomic.hpp')
-rw-r--r--src/utils/cpp/atomic.hpp13
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_--;