From: Ronen Friedman Date: Sun, 7 Nov 2021 09:03:59 +0000 (+0200) Subject: crimson/common: disable arithmetic operators for atomic enums X-Git-Tag: v17.1.0~484^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=2badc8987ed66b5839a053a8482012cc6b804016;p=ceph.git crimson/common: disable arithmetic operators for atomic enums While class enums are 'integral types', they do not support all that an int does. Signed-off-by: Ronen Friedman --- diff --git a/src/common/ceph_atomic.h b/src/common/ceph_atomic.h index 320963500e7f5..4a96ed97e9c7a 100644 --- a/src/common/ceph_atomic.h +++ b/src/common/ceph_atomic.h @@ -42,6 +42,7 @@ namespace ceph { } T operator=(T desired) noexcept { value = std::move(desired); + return *this; } operator T() const noexcept { return value; @@ -49,23 +50,30 @@ namespace ceph { // We need to differentiate with SFINAE as std::atomic offers beefier // interface for integral types. - std::enable_if_t, T> operator++() { + + template + std::enable_if_t && std::is_integral_v, TT> operator++() { return ++value; } - std::enable_if_t, T> operator++(int) { + template + std::enable_if_t && std::is_integral_v, TT> operator++(int) { return value++; } - std::enable_if_t, T> operator--() { + template + std::enable_if_t && std::is_integral_v, TT> operator--() { return --value; } - std::enable_if_t, T> operator--(int) { + template + std::enable_if_t && std::is_integral_v, TT> operator--(int) { return value--; } - std::enable_if_t, T> operator+=(const dummy_atomic& b) { + template + std::enable_if_t && std::is_integral_v, TT> operator+=(const dummy_atomic& b) { value += b; return value; } - std::enable_if_t, T> operator-=(const dummy_atomic& b) { + template + std::enable_if_t && std::is_integral_v, TT> operator-=(const dummy_atomic& b) { value -= b; return value; }