From: Jaakko Salli Date: Tue, 20 Apr 2010 12:55:34 +0000 (+0000) Subject: Fix VC6 compilation by changing the order of assignment operators in wxAny X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/49efebe2471223dafe8591aeeb194b8d4adc78bd Fix VC6 compilation by changing the order of assignment operators in wxAny git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64059 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/any.h b/include/wx/any.h index 8ee3d3c830..2e9a9af4e5 100644 --- a/include/wx/any.h +++ b/include/wx/any.h @@ -765,6 +765,15 @@ public: /** Assignment operators. */ + template + wxAny& operator=(const T &value) + { + m_type->DeleteValue(m_buffer); + m_type = wxAnyValueTypeImpl::sm_instance; + wxAnyValueTypeImpl::SetValue(value, m_buffer); + return *this; + } + wxAny& operator=(const wxAny &any) { if (this != &any) @@ -772,18 +781,7 @@ public: return *this; } -#if wxUSE_VARIANT && (!defined(__VISUALC__) || __VISUALC__ >= 1300) - // - // Adding this operator for VC6 breaks wxAny, and also - // some cases of implicit conversion from wxVariant to wxAny. - // - // e.g. wxAny any = variant; // should work - // - // wxAny any; - // any = 16; - // any = variant; // probably doesn't work - uses template - // // assignment, most likely - // +#if wxUSE_VARIANT wxAny& operator=(const wxVariant &variant) { AssignVariant(variant); @@ -791,15 +789,6 @@ public: } #endif - template - wxAny& operator=(const T &value) - { - m_type->DeleteValue(m_buffer); - m_type = wxAnyValueTypeImpl::sm_instance; - wxAnyValueTypeImpl::SetValue(value, m_buffer); - return *this; - } - wxAny& operator=(const char* value) { Assign(wxString(value)); return *this; } wxAny& operator=(const wchar_t* value) diff --git a/tests/any/anytest.cpp b/tests/any/anytest.cpp index d405b5cf2f..e215f48905 100644 --- a/tests/any/anytest.cpp +++ b/tests/any/anytest.cpp @@ -482,16 +482,13 @@ void wxAnyTestCase::wxVariantConversions() CPPUNIT_ASSERT(variant.GetType() == "ulonglong"); CPPUNIT_ASSERT(variant.GetLong() == 1000); - // FIXME-VC6: for VC6, any = variant needs to be any = wxAny(variant). - // Note that 'wxAny any = variant' does work, probably because - // ctor is used in that case instead of assignment operator. - any = wxAny(vString); + any = vString; CPPUNIT_ASSERT(any == "ABC"); res = any.GetAs(&variant); CPPUNIT_ASSERT(res); CPPUNIT_ASSERT(variant.GetString() == "ABC"); - any = wxAny(vDouble); + any = vDouble; double d = wxANY_AS(any, double); CPPUNIT_ASSERT_DOUBLES_EQUAL(d, TEST_FLOAT_CONST, FEQ_DELTA); res = any.GetAs(&variant); @@ -500,7 +497,7 @@ void wxAnyTestCase::wxVariantConversions() TEST_FLOAT_CONST, FEQ_DELTA); - any = wxAny(vBool); + any = vBool; CPPUNIT_ASSERT(wxANY_AS(any, bool) == true); res = any.GetAs(&variant); CPPUNIT_ASSERT(res);