00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00048 #ifndef STLSOFT_INCL_STLSOFT_UTIL_HPP_OPERATOR_BOOL
00049 #define STLSOFT_INCL_STLSOFT_UTIL_HPP_OPERATOR_BOOL
00050
00051 #ifndef STLSOFT_DOCUMENTATION_SKIP_SECTION
00052 # define STLSOFT_VER_STLSOFT_UTIL_HPP_OPERATOR_BOOL_MAJOR 4
00053 # define STLSOFT_VER_STLSOFT_UTIL_HPP_OPERATOR_BOOL_MINOR 0
00054 # define STLSOFT_VER_STLSOFT_UTIL_HPP_OPERATOR_BOOL_REVISION 1
00055 # define STLSOFT_VER_STLSOFT_UTIL_HPP_OPERATOR_BOOL_EDIT 36
00056 #endif
00057
00058
00059
00060
00061
00062 #ifndef STLSOFT_INCL_STLSOFT_H_STLSOFT
00063 # include <stlsoft/stlsoft.h>
00064 #endif
00065
00066
00067
00068
00069
00070 #ifndef _STLSOFT_NO_NAMESPACE
00071 namespace stlsoft
00072 {
00073 #endif
00074
00075
00076
00077
00078
00091 # define STLSOFT_DEFINE_OPERATOR_BOOL_TYPES(U, G, B) \
00092 \
00093 typedef stlsoft_ns_qual(operator_bool_generator)<U>::class_type G; \
00094 typedef G::return_type B
00095
00111 #if defined(STLSOFT_COMPILER_IS_BORLAND) || \
00112 ( defined(STLSOFT_COMPILER_IS_MSVC) && \
00113 _MSC_VER < 1300)
00114
00115 # define STLSOFT_DEFINE_OPERATOR_BOOL_TYPES_T(U, G, B) \
00116 \
00117 STLSOFT_DEFINE_OPERATOR_BOOL_TYPES(U, G, B)
00118
00119 #else
00120
00121 # define STLSOFT_DEFINE_OPERATOR_BOOL_TYPES_T(U, G, B) \
00122 \
00123 typedef ss_typename_param_k stlsoft_ns_qual(operator_bool_generator)<U>::class_type G; \
00124 typedef ss_typename_param_k G::return_type B
00125
00126 #endif
00127
00128
00129
00130
00131
00137 template <ss_typename_param_k T>
00138 struct operator_bool_generator
00139 {
00140 public:
00141 typedef operator_bool_generator<T> class_type;
00142
00143 #ifdef STLSOFT_CF_OPERATOR_BOOL_AS_OPERATOR_POINTER_TO_MEMBER_SUPPORT
00144 typedef int class_type::*return_type;
00145
00147 static return_type true_value()
00148 {
00149 return &class_type::i;
00150 }
00151
00152 private:
00153 int i;
00154 public:
00155 #else
00156 typedef class_type const* return_type;
00157
00159 static return_type true_value()
00160 {
00161 class_type t;
00162 void *p = static_cast<void*>(&t);
00163
00164 return static_cast<return_type>(p);
00165 }
00166 #endif // STLSOFT_CF_OPERATOR_BOOL_AS_OPERATOR_POINTER_TO_MEMBER_SUPPORT
00167
00169 static return_type false_value()
00170 {
00171 return static_cast<return_type>(0);
00172 }
00173
00175 #ifdef STLSOFT_CF_MEMBER_TEMPLATE_FUNCTION_SUPPORT
00176 template <ss_typename_param_k U>
00177 static return_type translate(U b)
00178 #else
00179 static return_type translate(ss_bool_t b)
00180 #endif // STLSOFT_CF_MEMBER_TEMPLATE_FUNCTION_SUPPORT
00181 {
00182 return b ? true_value() : false_value();
00183 }
00184
00185 private:
00186 void operator delete(void*);
00187 };
00188
00189
00190
00191 #ifndef _STLSOFT_NO_NAMESPACE
00192 }
00193 #endif
00194
00195
00196
00197 #endif
00198
00199