Add non-template wxWeakRef<T> 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
This commit is contained in:
@@ -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 <class TDerived>
|
||||
|
@@ -79,6 +79,10 @@ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( WeakRefTestCase, "WeakRefTestCase" );
|
||||
void WeakRefTestCase::DeclareTest()
|
||||
{
|
||||
{
|
||||
// Not initializing or initializing with NULL should work too
|
||||
wxWeakRef<wxEvtHandler> wroDef;
|
||||
wxWeakRef<wxEvtHandler> 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()
|
||||
|
Reference in New Issue
Block a user