// Purpose: declares wxIf<> metaprogramming construct
// Author: Vaclav Slavik
// Created: 2008-01-22
-// RCS-ID: $Id$
// Copyright: (c) 2008 Vaclav Slavik
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// 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
- {
- // 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<typename TTrue, typename TFalse> struct Result {};
}
#endif // VC++ <= 6
;
{
template<typename TTrue, typename TFalse> struct Result
{
- struct value : TTrue { };
+ typedef TTrue value;
};
};
{
template<typename TTrue, typename TFalse> struct Result
{
- struct value : TFalse { };
+ typedef TFalse value;
};
};
} // 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.
//
template<bool Cond, typename TTrue, typename TFalse>
struct wxIf
{
- // notice that value can't be a typedef, VC6 refuses to use it as a base
- // class in this case
- struct value : wxPrivate::wxIfImpl<Cond>::Result<TTrue, TFalse>::value { };
+ typedef typename wxPrivate::wxIfImpl<Cond>
+ ::template Result<TTrue, TFalse>::value
+ value;
};
#endif // _WX_META_IF_H_