From 43aecc4dd77cf2ee596ada72448f5ca3e8011afe Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sat, 10 Apr 2010 18:13:29 +0000 Subject: [PATCH] Add non-template wxWeakRef constructor from T*. We need a non-template ctor to make the code initializing wxWeakRef with literal NULL to compile. Closes #11916. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@63934 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/weakref.h | 7 +++++++ tests/weakref/weakref.cpp | 17 +++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/include/wx/weakref.h b/include/wx/weakref.h index 96ed48ee6f..df31c2fdc4 100644 --- a/include/wx/weakref.h +++ b/include/wx/weakref.h @@ -211,6 +211,13 @@ public: // Default ctor wxWeakRef() { } + // Ctor from the object of this type: this is needed as the template ctor + // below is not used by at least g++4 when a literal NULL is used + wxWeakRef(T *pobj) + { + Assign(pobj); + } + // When we have the full type here, static_cast<> will always work // (or give a straight compiler error). template diff --git a/tests/weakref/weakref.cpp b/tests/weakref/weakref.cpp index 2c0eea61be..3550d13805 100644 --- a/tests/weakref/weakref.cpp +++ b/tests/weakref/weakref.cpp @@ -79,6 +79,10 @@ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( WeakRefTestCase, "WeakRefTestCase" ); void WeakRefTestCase::DeclareTest() { { + // Not initializing or initializing with NULL should work too + wxWeakRef wroDef; + wxWeakRef wro0(NULL); + wxObject o; // Should not work wxEvtHandler eh; wxObjectTrackable ot; @@ -123,6 +127,19 @@ void WeakRefTestCase::AssignTest() // Should be reset now CPPUNIT_ASSERT( !wro1 ); CPPUNIT_ASSERT( !wro2 ); + + // Explicitly resetting should work too + wxEvtHandler eh; + wxObjectTrackable ot; + + wro1 = &eh; + wro2 = &ot; + + wro1 = NULL; + wro2 = NULL; + + CPPUNIT_ASSERT( !wro1 ); + CPPUNIT_ASSERT( !wro2 ); } void WeakRefTestCase::AssignWeakRefTest() -- 2.47.2