fix compilation with VC6
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@51449 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -11,6 +11,8 @@
|
|||||||
#ifndef _WX_META_IF_H_
|
#ifndef _WX_META_IF_H_
|
||||||
#define _WX_META_IF_H_
|
#define _WX_META_IF_H_
|
||||||
|
|
||||||
|
#include "wx/defs.h"
|
||||||
|
|
||||||
// NB: This code is intentionally written without partial templates
|
// NB: This code is intentionally written without partial templates
|
||||||
// specialization, because some older compilers (notably VC6) don't
|
// specialization, because some older compilers (notably VC6) don't
|
||||||
// support it.
|
// support it.
|
||||||
@@ -18,10 +20,27 @@
|
|||||||
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
|
||||||
|
{
|
||||||
|
// 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:
|
// specialization for true:
|
||||||
template<>
|
template <>
|
||||||
struct wxIfImpl<true>
|
struct wxIfImpl<true>
|
||||||
{
|
{
|
||||||
template<typename TTrue, typename TFalse> struct Result
|
template<typename TTrue, typename TFalse> struct Result
|
||||||
@@ -48,11 +67,8 @@ struct wxIfImpl<false>
|
|||||||
//
|
//
|
||||||
// See wxVector<T> in vector.h for usage example
|
// See wxVector<T> in vector.h for usage example
|
||||||
template<bool Cond, typename TTrue, typename TFalse>
|
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_
|
#endif // _WX_META_IF_H_
|
||||||
|
Reference in New Issue
Block a user