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 
00041 
00048 #ifndef STLSOFT_INCL_STLSOFT_UTIL_HPP_NULL
00049 #define STLSOFT_INCL_STLSOFT_UTIL_HPP_NULL
00050 
00051 #ifndef STLSOFT_DOCUMENTATION_SKIP_SECTION
00052 # define STLSOFT_VER_STLSOFT_UTIL_HPP_NULL_MAJOR     4
00053 # define STLSOFT_VER_STLSOFT_UTIL_HPP_NULL_MINOR     0
00054 # define STLSOFT_VER_STLSOFT_UTIL_HPP_NULL_REVISION  1
00055 # define STLSOFT_VER_STLSOFT_UTIL_HPP_NULL_EDIT      50
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 #ifdef _STLSOFT_NULL_v_DEFINED
00069 # undef _STLSOFT_NULL_v_DEFINED
00070 #endif 
00071 
00072 #define _STLSOFT_NULL_v_DEFINED
00073 
00074 #if defined(STLSOFT_COMPILER_IS_DMC) && \
00075     __DMC__ < 0x0840
00076 # undef _STLSOFT_NULL_v_DEFINED
00077 #elif defined(STLSOFT_COMPILER_IS_MSVC) && \
00078       _MSC_VER < 1310
00079 # undef _STLSOFT_NULL_v_DEFINED
00080 #elif defined(STLSOFT_COMPILER_IS_WATCOM)
00081 # undef _STLSOFT_NULL_v_DEFINED
00082 #endif 
00083 
00084 
00085 
00086 #ifdef _STLSOFT_NULL_v_DEFINED_PTR_TO_MEMBER_SUPPORT
00087 # undef _STLSOFT_NULL_v_DEFINED_PTR_TO_MEMBER_SUPPORT
00088 #endif 
00089 
00090 #define _STLSOFT_NULL_v_DEFINED_PTR_TO_MEMBER_SUPPORT
00091 
00092 #if defined(STLSOFT_COMPILER_IS_GCC)
00093 # undef _STLSOFT_NULL_v_DEFINED_PTR_TO_MEMBER_SUPPORT
00094 #elif defined(STLSOFT_COMPILER_IS_MWERKS)
00095 # undef _STLSOFT_NULL_v_DEFINED_PTR_TO_MEMBER_SUPPORT
00096 #endif 
00097 
00098 
00099 
00100 
00101 
00102 #ifndef _STLSOFT_NO_NAMESPACE
00103 namespace stlsoft
00104 {
00105 #endif 
00106 
00107 
00108 
00109 
00110 
00111 #ifdef _STLSOFT_NULL_v_DEFINED
00112 
00134 struct NULL_v
00135 {
00136 
00137 public:
00139     NULL_v()
00140     {}
00141 
00146 public:
00147     static NULL_v create()
00148     {
00149         return NULL_v();
00150     }
00151 
00152 
00153 public:
00155     template <ss_typename_param_k T>
00156     operator T *() const
00157     {
00158         return 0;
00159     }
00160 
00161 #ifdef _STLSOFT_NULL_v_DEFINED_PTR_TO_MEMBER_SUPPORT
00163     template<   ss_typename_param_k T2
00164             ,   ss_typename_param_k C
00165             >
00166     operator T2 C::*() const
00167     {
00168         return 0;
00169     }
00170 #endif 
00171 
00175     template <ss_typename_param_k T>
00176     ss_bool_t equal(T const& rhs) const
00177     {
00178         return rhs == 0;
00179     }
00181     template <ss_typename_param_k T>
00182     ss_bool_t equals(T const& rhs) const
00183     {
00184         return equal(rhs);
00185     }
00186 
00187 
00188 private:
00189     void operator &() const;
00190 
00191 #if !defined(STLSOFT_COMPILER_IS_GCC)
00192     NULL_v(NULL_v const&);
00193     NULL_v const& operator =(NULL_v const&);
00194 #endif 
00195 };
00196 
00197 #if 0
00198 
00202 template <ss_typename_param_k T>
00203 inline ss_bool_t operator ==(NULL_v const& lhs, T const& rhs)
00204 {
00205     STLSOFT_STATIC_ASSERT(sizeof(rhs) == 4);
00206 
00207     return lhs.equal(rhs);
00208 }
00209 
00214 template <ss_typename_param_k T>
00215 inline ss_bool_t operator ==(T const& lhs, NULL_v const& rhs)
00216 {
00217     STLSOFT_STATIC_ASSERT(sizeof(lhs) == 4);
00218 
00219     return rhs.equal(lhs);
00220 }
00221 
00226 template <ss_typename_param_k T>
00227 inline ss_bool_t operator !=(NULL_v const& lhs, T const& rhs)
00228 {
00229     STLSOFT_STATIC_ASSERT(sizeof(rhs) == 4);
00230 
00231     return !lhs.equal(rhs);
00232 }
00233 
00238 template <ss_typename_param_k T>
00239 inline ss_bool_t operator !=(T const& lhs, NULL_v const& rhs)
00240 {
00241     STLSOFT_STATIC_ASSERT(sizeof(lhs) == 4);
00242 
00243     return !rhs.equal(lhs);
00244 }
00245 #endif 
00246 
00247 #endif 
00248 
00250 
00251 
00252 #ifdef STLSOFT_UNITTEST
00253 # include "./unittest/null_unittest_.h"
00254 #endif 
00255 
00256 
00257 
00258 #ifndef _STLSOFT_NO_NAMESPACE
00259 } 
00260 #endif 
00261 
00262 
00263 
00264 #endif 
00265 
00266