From 2badc8987ed66b5839a053a8482012cc6b804016 Mon Sep 17 00:00:00 2001 From: Ronen Friedman Date: Sun, 7 Nov 2021 11:03:59 +0200 Subject: [PATCH] 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 --- src/common/ceph_atomic.h | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/common/ceph_atomic.h b/src/common/ceph_atomic.h index 320963500e7..4a96ed97e9c 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; } -- 2.39.5