]> git.saurik.com Git - wxWidgets.git/commitdiff
fix compilation with VC6
authorVadim Zeitlin <vadim@wxwidgets.org>
Tue, 29 Jan 2008 18:37:38 +0000 (18:37 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Tue, 29 Jan 2008 18:37:38 +0000 (18:37 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@51449 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/meta/if.h

index 64532e6e5df61adc920963d5e7d352a20818aae0..9b533a5ab10b6834d97ab4bfb4a32e4107bbe1ec 100644 (file)
@@ -11,6 +11,8 @@
 #ifndef _WX_META_IF_H_
 #define _WX_META_IF_H_
 
+#include "wx/defs.h"
+
 // NB: This code is intentionally written without partial templates
 //     specialization, because some older compilers (notably VC6) don't
 //     support it.
 namespace wxPrivate
 {
 
-template<bool Cond> struct wxIfImpl {};
+template <bool Cond>
+struct wxIfImpl
+
+// broken VC6 needs not just an incomplete template class declaration but a
+// "skeleton" declaration of the specialized versions below as it apparently
+// tries to look up the types in the generic template definition at some moment
+// even though it ends up by using the correct specialization in the end -- but
+// without this skeleton it doesn't recognize Result as a class at all below
+#if defined(__VISUALC__) && !wxCHECK_VISUALC_VERSION(7)
+{
+    template<typename TTrue, typename TFalse> struct Result
+    {
+        // intentionally don't define value here, this shouldn't be actually
+        // used, it's here just to work around a compiler bug
+    };
+}
+#endif // VC++ <= 6
+;
 
 // specialization for true:
-template<>
+template <>
 struct wxIfImpl<true>
 {
     template<typename TTrue, typename TFalse> struct Result
@@ -48,11 +67,8 @@ struct wxIfImpl<false>
 //
 // See wxVector<T> in vector.h for usage example
 template<bool Cond, typename TTrue, typename TFalse>
-struct wxIf
+struct wxIf : wxPrivate::wxIfImpl<Cond>::template Result<TTrue, TFalse>
 {
-    typedef typename wxPrivate::wxIfImpl<Cond>
-                         ::template Result<TTrue,TFalse>::value
-            value;
 };
 
 #endif // _WX_META_IF_H_