00001 #ifndef CXX_FEATURES_CONFIG_H
00002 # define CXX_FEATURES_CONFIG_H
00003
00004 # if !HAVE_NAMESPACE_STD
00005 # define std
00006 # endif
00007
00008 #if HAVE_CXX_STDC_HEADERS
00009 # define STDC std
00010 #else
00011 # define STDC
00012 #endif
00013
00014 # if !HAVE_BOOL
00015 # ifndef bool
00016 typedef int bool;
00017 # endif
00018 # ifndef true
00019 # define true 1
00020 # endif
00021 # ifndef false
00022 # define false 0
00023 # endif
00024 # endif
00025
00026 # if !HAVE_TYPENAME
00027 # define typename
00028 # endif
00029
00030 # if !HAVE_EXPLICIT
00031 # define explicit
00032 # endif
00033
00034 # if !HAVE_RESTRICT
00035 # if HAVE_PRIVATE_RESTRICT
00036 # define restrict __restrict
00037 # else
00038 # define restrict
00039 # endif
00040 # endif
00041
00042 # if HAVE_NEW_STYLE_CASTS
00043 # define STATIC_CAST(type,expr) static_cast<type> (expr)
00044 # define CONST_CAST(type,expr) const_cast<type> (expr)
00045 # define REINTERPRET_CAST(type,expr) reinterpret_cast<type> (expr)
00046 # else
00047 # define STATIC_CAST(type,expr) ((type)(expr))
00048 # define CONST_CAST(type,expr) ((type)(expr))
00049 # define REINTERPRET_CAST(type,expr) ((type)(expr))
00050 # endif
00051
00052 # if HAVE_DYNAMIC_CAST && HAVE_TYPEID
00053 # define HAVE_FUNCTIONAL_RTTI 1
00054 # endif
00055
00056 # if HAVE_TEMPLATE_DEFAULT_ARGS
00057 # define CXX_T_DEFAULT(x) , x
00058 # define CXX_T_ONDEFAULT(def,nodef) def
00059 # else
00060 # define CXX_T_DEFAULT(x)
00061 # define CXX_T_ONDEFAULT(def,nodef) nodef
00062 # endif
00063
00064 # if HAVE_TEMPLATE_NULL_ARGS
00065 # define TEMPLATE_NULL_ARGS <>
00066 # else
00067 # define TEMPLATE_NULL_ARGS
00068 # endif
00069
00070 # if HAVE_TEMPLATE_NULL_SPEC
00071 # define TEMPLATE_NULL_SPEC template<>
00072 # else
00073 # define TEMPLATE_NULL_SPEC
00074 # endif
00075
00076
00077 # if HAVE_PRETTY_FUNCTION
00078 # define CXX_FUNCTION __PRETTY_FUNCTION__
00079 # elif HAVE_FUNCTION
00080 # define CXX_FUNCTION __FUNCTION__
00081 # elif HAVE_FUNC
00082 # define CXX_FUNCTION __func__
00083 # endif
00084
00085 # if HAVE_ITERATOR
00086 # define ITERATOR_BASE(cat,val,diff) : public std::iterator<std::cat##_tag,val,diff>
00087 # elif HAVE_ITERATOR_TRAITS
00088 # define ITERATOR_BASE(cat,val,diff)
00089 # else
00090 # define ITERATOR_BASE(cat,val,diff) : public std::cat<val,diff>
00091 # endif
00092
00093 # if HAVE_REVERSE_ITERATOR_STYLE == 1
00094 # define REVERSE_ITERATOR(tname,tag,iter,value,reference,pointer,difference) \
00095 std::reverse_iterator<iter>
00096 # elif HAVE_REVERSE_ITERATOR_STYLE == 2
00097 # define REVERSE_ITERATOR(tname,tag,iter,value,reference,pointer,difference) \
00098 std::reverse_iterator<iter,std::tag,value,reference,pointer,difference>
00099 # elif HAVE_REVERSE_ITERATOR_STYLE == 3
00100 # define REVERSE_ITERATOR(tname,tag,iter,value,reference,pointer,difference) \
00101 std::tname<iter,value,reference,pointer,difference>
00102 # elif HAVE_REVERSE_ITERATOR_STYLE == 4
00103 # define REVERSE_ITERATOR(tname,tag,iter,value,reference,pointer,difference) \
00104 std::os_##tname<iter,value,reference,pointer,difference>
00105 # else
00106 # define REVERSE_ITERATOR(tname,tag,iter,value,reference,pointer,difference) \
00107 I_don_t_know_how_to_define_reverse_iterator
00108 # endif
00109
00110 # if HAVE_BROKEN_TEMPLATE_RESCOPE
00111 # define TEMPLATE_RESCOPE(scope)
00112 # else
00113 # define TEMPLATE_RESCOPE(scope) typename scope::
00114 # endif
00115
00116 # ifdef _MSC_VER
00117 # pragma warning(disable:4786) // '255' characters in the debug information
00118 # pragma warning(disable:4244) // conversion from double to float
00119 # pragma warning(disable:4305) // conversion from double to float (5.0)
00120 # endif //_MSC_VER
00121
00122 #endif