X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6712283cf1b562897bfc36c54da5e03c05f402ed..e4c903b2ea42fe104ef50d0ea6028f14d8309dfa:/include/wx/meta/if.h?ds=sidebyside diff --git a/include/wx/meta/if.h b/include/wx/meta/if.h index 64532e6e5d..931591cd48 100644 --- a/include/wx/meta/if.h +++ b/include/wx/meta/if.h @@ -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. @@ -18,10 +20,23 @@ namespace wxPrivate { -template struct wxIfImpl {}; +template +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 struct Result {}; +} +#endif // VC++ <= 6 +; // specialization for true: -template<> +template <> struct wxIfImpl { template struct Result @@ -42,7 +57,7 @@ struct wxIfImpl } // 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. // @@ -51,7 +66,7 @@ template struct wxIf { typedef typename wxPrivate::wxIfImpl - ::template Result::value + ::template Result::value value; };