From c9faa9e9a2cc88379a86e3e2ed731eadba948084 Mon Sep 17 00:00:00 2001 From: =?utf8?q?V=C3=A1clav=20Slav=C3=ADk?= Date: Thu, 31 Jan 2008 11:26:52 +0000 Subject: [PATCH] Fixed compilation of wxVector with VC6: * reverted VC6 hack in wxIf<>, using helper struct instead of typedef didn't fix compilation, only caused the compiler to crash instead of emitting semi-useful errors * changed wxVector to use typedef for Ops class instead of privately deriving from wxIf<...>::value; this is enough to make VC6 happy git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@51471 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/meta/if.h | 28 +--------------------------- include/wx/vector.h | 27 +++++++++++++++++---------- 2 files changed, 18 insertions(+), 37 deletions(-) diff --git a/include/wx/meta/if.h b/include/wx/meta/if.h index 3de045a61f..82e6d3b135 100644 --- a/include/wx/meta/if.h +++ b/include/wx/meta/if.h @@ -30,19 +30,7 @@ struct wxIfImpl // without this skeleton it doesn't recognize Result as a class at all below #if defined(__VISUALC__) && !wxCHECK_VISUALC_VERSION(7) { - template struct Result - { - // unfortunately we also need to define value here because otherwise - // Result::value is not recognized as a class neither and it has to be - // complete too -- at least make it unusable because it really, really - // should never be used - class value - { - private: - value(); - ~value(); - }; - }; + template struct Result {}; } #endif // VC++ <= 6 ; @@ -53,11 +41,7 @@ struct wxIfImpl { template struct Result { -#if defined(__VISUALC__) && !wxCHECK_VISUALC_VERSION(7) - struct value : TTrue { }; -#else typedef TTrue value; -#endif }; }; @@ -67,11 +51,7 @@ struct wxIfImpl { template struct Result { -#if defined(__VISUALC__) && !wxCHECK_VISUALC_VERSION(7) - struct value : TFalse { }; -#else typedef TFalse value; -#endif }; }; @@ -85,15 +65,9 @@ struct wxIfImpl template struct wxIf { -#if defined(__VISUALC__) && !wxCHECK_VISUALC_VERSION(7) - // notice that value can't be a typedef, VC6 refuses to use it as a base - // class in this case - struct value : wxPrivate::wxIfImpl::Result::value { }; -#else // !VC6++ typedef typename wxPrivate::wxIfImpl ::template Result::value value; -#endif }; #endif // _WX_META_IF_H_ diff --git a/include/wx/vector.h b/include/wx/vector.h index f7aac0b20b..e8a6b3c573 100644 --- a/include/wx/vector.h +++ b/include/wx/vector.h @@ -102,12 +102,19 @@ struct wxVectorMemOpsGeneric template class wxVector - // this cryptic expression means "derive from wxVectorMemOpsMovable if - // type T is movable type, otherwise derive from wxVectorMemOpsGeneric - : private wxIf< wxIsMovable::value, - wxPrivate::wxVectorMemOpsMovable, - wxPrivate::wxVectorMemOpsGeneric >::value { +private: + // Tthis cryptic expression means "typedef Ops to wxVectorMemOpsMovable if + // type T is movable type, otherwise to wxVectorMemOpsGeneric". + // + // Note that we use typedef instead of privately deriving from this (which + // would allowed us to omit "Ops::" prefixes below) to keep VC6 happy, + // it can't compile code that derives from wxIf<...>::value. + typedef typename wxIf< wxIsMovable::value, + wxPrivate::wxVectorMemOpsMovable, + wxPrivate::wxVectorMemOpsGeneric >::value + Ops; + public: typedef size_t size_type; typedef T value_type; @@ -135,7 +142,7 @@ public: m_values[i].~T(); } - Free(m_values); + Ops::Free(m_values); m_values = NULL; m_size = m_capacity = 0; } @@ -156,7 +163,7 @@ public: if ( m_capacity + increment > n ) n = m_capacity + increment; - m_values = Realloc(m_values, n * sizeof(value_type), m_size); + m_values = Ops::Realloc(m_values, n * sizeof(value_type), m_size); m_capacity = n; } @@ -239,7 +246,7 @@ public: // the way: if ( after > 0 ) { - MemmoveForward(m_values + idx + 1, m_values + idx, after); + Ops::MemmoveForward(m_values + idx + 1, m_values + idx, after); } #if wxUSE_EXCEPTIONS @@ -258,7 +265,7 @@ public: // back to their original positions in m_values if ( after > 0 ) { - MemmoveBackward(m_values + idx, m_values + idx + 1, after); + Ops::MemmoveBackward(m_values + idx, m_values + idx + 1, after); } throw; // rethrow the exception @@ -295,7 +302,7 @@ public: // once that's done, move following elements over to the freed space: if ( after > 0 ) { - MemmoveBackward(m_values + idx, m_values + idx + count, after); + Ops::MemmoveBackward(m_values + idx, m_values + idx + count, after); } m_size -= count; -- 2.45.2