diff options
Diffstat (limited to '')
-rw-r--r-- | src/common/parent_of_member.h | 14 |
1 files changed, 8 insertions, 6 deletions
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 <typename T, size_t Size, size_t Align> -struct TypedStorage { +struct TypedStorageImpl { std::aligned_storage_t<Size, Align> storage_; }; +} // namespace detail -#define TYPED_STORAGE(...) TypedStorage<__VA_ARGS__, sizeof(__VA_ARGS__), alignof(__VA_ARGS__)> +template <typename T> +using TypedStorage = detail::TypedStorageImpl<T, sizeof(T), alignof(T)>; template <typename T> -static constexpr T* GetPointer(TYPED_STORAGE(T) & ts) { +static constexpr T* GetPointer(TypedStorage<T>& ts) { return static_cast<T*>(static_cast<void*>(std::addressof(ts.storage_))); } template <typename T> -static constexpr const T* GetPointer(const TYPED_STORAGE(T) & ts) { +static constexpr const T* GetPointer(const TypedStorage<T>& ts) { return static_cast<const T*>(static_cast<const void*>(std::addressof(ts.storage_))); } @@ -72,7 +74,7 @@ struct OffsetOfCalculator { union Union { char c{}; UnionHolder first_union; - TYPED_STORAGE(ParentType) parent; + TypedStorage<ParentType> parent; constexpr Union() : c() {} }; |