]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/meta/if.h
fixing warning and compile error against 10.4
[wxWidgets.git] / include / wx / meta / if.h
index 64532e6e5df61adc920963d5e7d352a20818aae0..931591cd4811a1afe6b2200f15392f2ecbf488ea 100644 (file)
@@ -11,6 +11,8 @@
 #ifndef _WX_META_IF_H_
 #define _WX_META_IF_H_
 
 #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.
 // NB: This code is intentionally written without partial templates
 //     specialization, because some older compilers (notably VC6) don't
 //     support it.
 namespace wxPrivate
 {
 
 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 {};
+}
+#endif // VC++ <= 6
+;
 
 // specialization for true:
 
 // specialization for true:
-template<>
+template <>
 struct wxIfImpl<true>
 {
     template<typename TTrue, typename TFalse> struct Result
 struct wxIfImpl<true>
 {
     template<typename TTrue, typename TFalse> struct Result
@@ -42,7 +57,7 @@ struct wxIfImpl<false>
 
 } // namespace wxPrivate
 
 
 } // namespace wxPrivate
 
-// wxIf<> template defines nested type "value" which is the same as 
+// wxIf<> template defines nested type "value" which is the same as
 // TTrue if the condition Cond (boolean compile-time constant) was met and
 // TFalse if it wasn't.
 //
 // TTrue if the condition Cond (boolean compile-time constant) was met and
 // TFalse if it wasn't.
 //
@@ -51,7 +66,7 @@ template<bool Cond, typename TTrue, typename TFalse>
 struct wxIf
 {
     typedef typename wxPrivate::wxIfImpl<Cond>
 struct wxIf
 {
     typedef typename wxPrivate::wxIfImpl<Cond>
-                         ::template Result<TTrue,TFalse>::value
+                     ::template Result<TTrue, TFalse>::value
             value;
 };
 
             value;
 };