1
/////////////////////////////////////////////////////////////////////////////
3
// Purpose: declares wxIf<> metaprogramming construct
4
// Author: Vaclav Slavik
6
// RCS-ID: $Id: if.h 61724 2009-08-21 10:41:26Z VZ $
7
// Copyright: (c) 2008 Vaclav Slavik
8
// Licence: wxWindows licence
9
/////////////////////////////////////////////////////////////////////////////
11
#ifndef _WX_META_IF_H_
12
#define _WX_META_IF_H_
16
// NB: This code is intentionally written without partial templates
17
// specialization, because some older compilers (notably VC6) don't
26
// broken VC6 needs not just an incomplete template class declaration but a
27
// "skeleton" declaration of the specialized versions below as it apparently
28
// tries to look up the types in the generic template definition at some moment
29
// even though it ends up by using the correct specialization in the end -- but
30
// without this skeleton it doesn't recognize Result as a class at all below
31
#if defined(__VISUALC__) && !wxCHECK_VISUALC_VERSION(7)
33
template<typename TTrue, typename TFalse> struct Result {};
38
// specialization for true:
42
template<typename TTrue, typename TFalse> struct Result
48
// specialization for false:
50
struct wxIfImpl<false>
52
template<typename TTrue, typename TFalse> struct Result
58
} // namespace wxPrivate
60
// wxIf<> template defines nested type "value" which is the same as
61
// TTrue if the condition Cond (boolean compile-time constant) was met and
62
// TFalse if it wasn't.
64
// See wxVector<T> in vector.h for usage example
65
template<bool Cond, typename TTrue, typename TFalse>
68
typedef typename wxPrivate::wxIfImpl<Cond>
69
::template Result<TTrue, TFalse>::value
73
#endif // _WX_META_IF_H_