From 66554d3b84f5fec60dcf5d896283a1a04487c0e0 Mon Sep 17 00:00:00 2001 From: Aaron Giles Date: Wed, 14 Jul 2021 19:03:09 -0700 Subject: delegate: Fix Visual Studio case with displaced object base (internal representation seems to have drifted since it was originally written). --- src/lib/util/delegate.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lib/util/delegate.h b/src/lib/util/delegate.h index 39cc5eb3d00..454045ba98e 100644 --- a/src/lib/util/delegate.h +++ b/src/lib/util/delegate.h @@ -350,7 +350,7 @@ public: // copy constructor delegate_mfp(const delegate_mfp &src) - : m_function(src.m_function), m_this_delta(0), m_dummy1(0), m_dummy2(0), m_size(0) + : m_function(src.m_function), m_this_delta(src.m_this_delta), m_dummy1(src.m_dummy1), m_dummy2(src.m_dummy2), m_size(src.m_size) { } @@ -358,7 +358,7 @@ public: template delegate_mfp(MemberFunctionType mfp, MemberFunctionClass *, ReturnType *, StaticFunctionType) { - //assert(sizeof(mfp) == 12 || sizeof(mfp) == 16); + static_assert(sizeof(mfp) == sizeof(void *) || sizeof(mfp) == 2 * sizeof(void *)); m_size = sizeof(mfp); *reinterpret_cast(this) = mfp; } @@ -375,7 +375,7 @@ public: void update_after_bind(FunctionType &funcptr, delegate_generic_class *&object) { funcptr = reinterpret_cast(m_function); - if (m_size == SINGLE_MEMFUNCPTR_SIZE + sizeof(int)) + if (m_size > SINGLE_MEMFUNCPTR_SIZE) object = reinterpret_cast(reinterpret_cast(object) + m_this_delta); } -- cgit v1.2.3