common: parent_of_member: Fix build for OffsetOf().
This commit is contained in:
		| @@ -133,27 +133,27 @@ template <auto MemberPtr> | |||||||
| using GetMemberType = typename GetMemberPointerTraits<decltype(MemberPtr)>::Member; | using GetMemberType = typename GetMemberPointerTraits<decltype(MemberPtr)>::Member; | ||||||
|  |  | ||||||
| template <auto MemberPtr, typename RealParentType = GetParentType<MemberPtr>> | template <auto MemberPtr, typename RealParentType = GetParentType<MemberPtr>> | ||||||
| static inline std::ptrdiff_t OffsetOf = [] { | constexpr std::ptrdiff_t OffsetOf() { | ||||||
|     using DeducedParentType = GetParentType<MemberPtr>; |     using DeducedParentType = GetParentType<MemberPtr>; | ||||||
|     using MemberType = GetMemberType<MemberPtr>; |     using MemberType = GetMemberType<MemberPtr>; | ||||||
|     static_assert(std::is_base_of<DeducedParentType, RealParentType>::value || |     static_assert(std::is_base_of<DeducedParentType, RealParentType>::value || | ||||||
|                   std::is_same<RealParentType, DeducedParentType>::value); |                   std::is_same<RealParentType, DeducedParentType>::value); | ||||||
|  |  | ||||||
|     return OffsetOfCalculator<RealParentType, MemberType>::OffsetOf(MemberPtr); |     return OffsetOfCalculator<RealParentType, MemberType>::OffsetOf(MemberPtr); | ||||||
| }(); | }; | ||||||
|  |  | ||||||
| } // namespace impl | } // namespace impl | ||||||
|  |  | ||||||
| template <auto MemberPtr, typename RealParentType = impl::GetParentType<MemberPtr>> | template <auto MemberPtr, typename RealParentType = impl::GetParentType<MemberPtr>> | ||||||
| constexpr RealParentType& GetParentReference(impl::GetMemberType<MemberPtr>* member) { | constexpr RealParentType& GetParentReference(impl::GetMemberType<MemberPtr>* member) { | ||||||
|     std::ptrdiff_t Offset = impl::OffsetOf<MemberPtr, RealParentType>; |     std::ptrdiff_t Offset = impl::OffsetOf<MemberPtr, RealParentType>(); | ||||||
|     return *static_cast<RealParentType*>( |     return *static_cast<RealParentType*>( | ||||||
|         static_cast<void*>(static_cast<uint8_t*>(static_cast<void*>(member)) - Offset)); |         static_cast<void*>(static_cast<uint8_t*>(static_cast<void*>(member)) - Offset)); | ||||||
| } | } | ||||||
|  |  | ||||||
| template <auto MemberPtr, typename RealParentType = impl::GetParentType<MemberPtr>> | template <auto MemberPtr, typename RealParentType = impl::GetParentType<MemberPtr>> | ||||||
| constexpr RealParentType const& GetParentReference(impl::GetMemberType<MemberPtr> const* member) { | constexpr RealParentType const& GetParentReference(impl::GetMemberType<MemberPtr> const* member) { | ||||||
|     std::ptrdiff_t Offset = impl::OffsetOf<MemberPtr, RealParentType>; |     std::ptrdiff_t Offset = impl::OffsetOf<MemberPtr, RealParentType>(); | ||||||
|     return *static_cast<const RealParentType*>(static_cast<const void*>( |     return *static_cast<const RealParentType*>(static_cast<const void*>( | ||||||
|         static_cast<const uint8_t*>(static_cast<const void*>(member)) - Offset)); |         static_cast<const uint8_t*>(static_cast<const void*>(member)) - Offset)); | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user