From 703c57a119d5ae48eb0d463b0f6d3f607931b300 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Mon, 11 Jan 2021 17:59:02 -0500 Subject: common/parent_of_member: Replace TYPED_STORAGE define with template alias Provides the same construct, but makes it obey namespacing. --- src/common/intrusive_red_black_tree.h | 4 ++-- src/common/parent_of_member.h | 14 ++++++++------ 2 files changed, 10 insertions(+), 8 deletions(-) (limited to 'src/common') diff --git a/src/common/intrusive_red_black_tree.h b/src/common/intrusive_red_black_tree.h index 929b5497e..fb55de94e 100644 --- a/src/common/intrusive_red_black_tree.h +++ b/src/common/intrusive_red_black_tree.h @@ -533,7 +533,7 @@ private: } private: - static constexpr TYPED_STORAGE(Derived) DerivedStorage = {}; + static constexpr TypedStorage DerivedStorage = {}; static_assert(GetParent(GetNode(GetPointer(DerivedStorage))) == GetPointer(DerivedStorage)); }; @@ -549,7 +549,7 @@ public: using TreeTypeImpl = impl::IntrusiveRedBlackTreeImpl; static constexpr bool IsValid() { - TYPED_STORAGE(Derived) DerivedStorage = {}; + TypedStorage DerivedStorage = {}; return GetParent(GetNode(GetPointer(DerivedStorage))) == GetPointer(DerivedStorage); } diff --git a/src/common/parent_of_member.h b/src/common/parent_of_member.h index 1af31ee44..d9a14529d 100644 --- a/src/common/parent_of_member.h +++ b/src/common/parent_of_member.h @@ -10,21 +10,23 @@ #include "common/common_types.h" namespace Common { - +namespace detail { template -struct TypedStorage { +struct TypedStorageImpl { std::aligned_storage_t storage_; }; +} // namespace detail -#define TYPED_STORAGE(...) TypedStorage<__VA_ARGS__, sizeof(__VA_ARGS__), alignof(__VA_ARGS__)> +template +using TypedStorage = detail::TypedStorageImpl; template -static constexpr T* GetPointer(TYPED_STORAGE(T) & ts) { +static constexpr T* GetPointer(TypedStorage& ts) { return static_cast(static_cast(std::addressof(ts.storage_))); } template -static constexpr const T* GetPointer(const TYPED_STORAGE(T) & ts) { +static constexpr const T* GetPointer(const TypedStorage& ts) { return static_cast(static_cast(std::addressof(ts.storage_))); } @@ -72,7 +74,7 @@ struct OffsetOfCalculator { union Union { char c{}; UnionHolder first_union; - TYPED_STORAGE(ParentType) parent; + TypedStorage parent; constexpr Union() : c() {} }; -- cgit v1.2.3