File indexing completed on 2024-11-16 09:17:29
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016 #include <boost/config.hpp> // for prior
0017 #include <boost/detail/workaround.hpp>
0018
0019 #ifdef BOOST_ITERATOR_CONFIG_DEF
0020 # error you have nested config_def #inclusion.
0021 #else
0022 # define BOOST_ITERATOR_CONFIG_DEF
0023 #endif
0024
0025
0026
0027
0028
0029 #if 1 || defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
0030 || BOOST_WORKAROUND(BOOST_BORLANDC, BOOST_TESTED_AT(0x531))
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045 # define BOOST_ITERATOR_REF_CONSTNESS_KILLS_WRITABILITY 1
0046
0047 #endif
0048
0049 #if BOOST_WORKAROUND(BOOST_BORLANDC, BOOST_TESTED_AT(0x5A0)) \
0050 || (BOOST_WORKAROUND(BOOST_INTEL_CXX_VERSION, <= 700) && defined(_MSC_VER)) \
0051 || BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(60590042)) \
0052 || BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x590))
0053
0054 # define BOOST_NO_LVALUE_RETURN_DETECTION
0055
0056 # if 0
0057 struct v {};
0058
0059 typedef char (&no)[3];
0060
0061 template <class T>
0062 no foo(T const&, ...);
0063
0064 template <class T>
0065 char foo(T&, int);
0066
0067
0068 struct value_iterator
0069 {
0070 v operator*() const;
0071 };
0072
0073 template <class T>
0074 struct lvalue_deref_helper
0075 {
0076 static T& x;
0077 enum { value = (sizeof(foo(*x,0)) == 1) };
0078 };
0079
0080 int z2[(lvalue_deref_helper<v*>::value == 1) ? 1 : -1];
0081 int z[(lvalue_deref_helper<value_iterator>::value) == 1 ? -1 : 1 ];
0082 # endif
0083
0084 #endif
0085
0086 #if BOOST_WORKAROUND(__MWERKS__, <=0x2407)
0087 # define BOOST_NO_IS_CONVERTIBLE
0088 #endif
0089
0090 #if BOOST_WORKAROUND(__GNUC__, == 3) && BOOST_WORKAROUND(__GNUC_MINOR__, < 4) && !defined(__EDG_VERSION__) \
0091 || BOOST_WORKAROUND(BOOST_BORLANDC, BOOST_TESTED_AT(0x551))
0092 # define BOOST_NO_IS_CONVERTIBLE_TEMPLATE
0093
0094 # if 0
0095 #include <boost/type_traits/is_convertible.hpp>
0096 template <class T>
0097 struct foo
0098 {
0099 foo(T);
0100
0101 template <class U>
0102 foo(foo<U> const& other) : p(other.p) { }
0103
0104 T p;
0105 };
0106
0107 bool x = boost::is_convertible<foo<int const*>, foo<int*> >::value;
0108 # endif
0109
0110 #endif
0111
0112
0113 #if !defined(BOOST_MSVC) && (defined(BOOST_NO_SFINAE) || defined(BOOST_NO_IS_CONVERTIBLE) || defined(BOOST_NO_IS_CONVERTIBLE_TEMPLATE))
0114 # define BOOST_NO_STRICT_ITERATOR_INTEROPERABILITY
0115 #endif
0116
0117 # if BOOST_WORKAROUND(BOOST_BORLANDC, BOOST_TESTED_AT(0x564))
0118
0119
0120
0121
0122
0123
0124
0125 # define BOOST_NO_ONE_WAY_ITERATOR_INTEROP
0126 # endif
0127
0128