diff options
| author | 2021-05-01 14:32:36 -0700 | |
|---|---|---|
| committer | 2021-05-05 16:40:54 -0700 | |
| commit | e02785be83dd3d02a8fc7aebc13337546f04bab8 (patch) | |
| tree | 22e7f675936fbacb8d7c188b4263719a65113d94 /src | |
| parent | fixup! common: intrusive_red_black_tree: Disable static_assert that will not ... (diff) | |
| download | yuzu-e02785be83dd3d02a8fc7aebc13337546f04bab8.tar.gz yuzu-e02785be83dd3d02a8fc7aebc13337546f04bab8.tar.xz yuzu-e02785be83dd3d02a8fc7aebc13337546f04bab8.zip | |
common: parent_of_member: Fix build for OffsetOf().
Diffstat (limited to 'src')
| -rw-r--r-- | src/common/parent_of_member.h | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/common/parent_of_member.h b/src/common/parent_of_member.h index d9a14529d..e0f8ab5c8 100644 --- a/src/common/parent_of_member.h +++ b/src/common/parent_of_member.h | |||
| @@ -133,27 +133,27 @@ template <auto MemberPtr> | |||
| 133 | using GetMemberType = typename GetMemberPointerTraits<decltype(MemberPtr)>::Member; | 133 | using GetMemberType = typename GetMemberPointerTraits<decltype(MemberPtr)>::Member; |
| 134 | 134 | ||
| 135 | template <auto MemberPtr, typename RealParentType = GetParentType<MemberPtr>> | 135 | template <auto MemberPtr, typename RealParentType = GetParentType<MemberPtr>> |
| 136 | static inline std::ptrdiff_t OffsetOf = [] { | 136 | constexpr std::ptrdiff_t OffsetOf() { |
| 137 | using DeducedParentType = GetParentType<MemberPtr>; | 137 | using DeducedParentType = GetParentType<MemberPtr>; |
| 138 | using MemberType = GetMemberType<MemberPtr>; | 138 | using MemberType = GetMemberType<MemberPtr>; |
| 139 | static_assert(std::is_base_of<DeducedParentType, RealParentType>::value || | 139 | static_assert(std::is_base_of<DeducedParentType, RealParentType>::value || |
| 140 | std::is_same<RealParentType, DeducedParentType>::value); | 140 | std::is_same<RealParentType, DeducedParentType>::value); |
| 141 | 141 | ||
| 142 | return OffsetOfCalculator<RealParentType, MemberType>::OffsetOf(MemberPtr); | 142 | return OffsetOfCalculator<RealParentType, MemberType>::OffsetOf(MemberPtr); |
| 143 | }(); | 143 | }; |
| 144 | 144 | ||
| 145 | } // namespace impl | 145 | } // namespace impl |
| 146 | 146 | ||
| 147 | template <auto MemberPtr, typename RealParentType = impl::GetParentType<MemberPtr>> | 147 | template <auto MemberPtr, typename RealParentType = impl::GetParentType<MemberPtr>> |
| 148 | constexpr RealParentType& GetParentReference(impl::GetMemberType<MemberPtr>* member) { | 148 | constexpr RealParentType& GetParentReference(impl::GetMemberType<MemberPtr>* member) { |
| 149 | std::ptrdiff_t Offset = impl::OffsetOf<MemberPtr, RealParentType>; | 149 | std::ptrdiff_t Offset = impl::OffsetOf<MemberPtr, RealParentType>(); |
| 150 | return *static_cast<RealParentType*>( | 150 | return *static_cast<RealParentType*>( |
| 151 | static_cast<void*>(static_cast<uint8_t*>(static_cast<void*>(member)) - Offset)); | 151 | static_cast<void*>(static_cast<uint8_t*>(static_cast<void*>(member)) - Offset)); |
| 152 | } | 152 | } |
| 153 | 153 | ||
| 154 | template <auto MemberPtr, typename RealParentType = impl::GetParentType<MemberPtr>> | 154 | template <auto MemberPtr, typename RealParentType = impl::GetParentType<MemberPtr>> |
| 155 | constexpr RealParentType const& GetParentReference(impl::GetMemberType<MemberPtr> const* member) { | 155 | constexpr RealParentType const& GetParentReference(impl::GetMemberType<MemberPtr> const* member) { |
| 156 | std::ptrdiff_t Offset = impl::OffsetOf<MemberPtr, RealParentType>; | 156 | std::ptrdiff_t Offset = impl::OffsetOf<MemberPtr, RealParentType>(); |
| 157 | return *static_cast<const RealParentType*>(static_cast<const void*>( | 157 | return *static_cast<const RealParentType*>(static_cast<const void*>( |
| 158 | static_cast<const uint8_t*>(static_cast<const void*>(member)) - Offset)); | 158 | static_cast<const uint8_t*>(static_cast<const void*>(member)) - Offset)); |
| 159 | } | 159 | } |