Borland workarounds

[SVN r21893]
This commit is contained in:
Dave Abrahams
2004-01-24 17:39:45 +00:00
parent 020f2ab867
commit 010f715950
3 changed files with 16 additions and 5 deletions

View File

@ -122,4 +122,16 @@
# define BOOST_ARG_DEPENDENT_TYPENAME # define BOOST_ARG_DEPENDENT_TYPENAME
# endif # endif
// no include guard multiple inclusion intended # if BOOST_WORKAROUND(__GNUC__, == 2) && BOOST_WORKAROUND(__GNUC_MINOR__, BOOST_TESTED_AT(95)) \
|| BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
// GCC-2.95 eagerly instantiates templated constructors and conversion
// operators in convertibility checks, causing premature errors.
//
// Borland's problems are harder to diagnose due to lack of an
// instantiation stack backtrace. They may be due in part to the fact
// that it drops cv-qualification willy-nilly in templates.
# define BOOST_NO_ONE_WAY_ITERATOR_INTEROP
# endif
// no include guard; multiple inclusion intended

View File

@ -18,6 +18,7 @@
#undef BOOST_NO_STRICT_ITERATOR_INTEROPERABILITY #undef BOOST_NO_STRICT_ITERATOR_INTEROPERABILITY
#undef BOOST_ARG_DEPENDENT_TYPENAME #undef BOOST_ARG_DEPENDENT_TYPENAME
#undef BOOST_NO_LVALUE_RETURN_DETECTION #undef BOOST_NO_LVALUE_RETURN_DETECTION
#undef BOOST_NO_ONE_WAY_ITERATOR_INTEROP
#ifdef BOOST_ITERATOR_CONFIG_DEF #ifdef BOOST_ITERATOR_CONFIG_DEF
# undef BOOST_ITERATOR_CONFIG_DEF # undef BOOST_ITERATOR_CONFIG_DEF

View File

@ -228,7 +228,7 @@ namespace boost
template <class I1, class I2> template <class I1, class I2>
struct apply struct apply
: :
# if BOOST_WORKAROUND(__GNUC__, == 2) && BOOST_WORKAROUND(__GNUC_MINOR__, BOOST_TESTED_AT(95)) # ifdef BOOST_NO_ONE_WAY_ITERATOR_INTEROP
iterator_difference<I1> iterator_difference<I1>
# elif BOOST_WORKAROUND(BOOST_MSVC, == 1200) # elif BOOST_WORKAROUND(BOOST_MSVC, == 1200)
mpl::if_< mpl::if_<
@ -575,9 +575,7 @@ namespace boost
// ---------------- // ----------------
// //
# if BOOST_WORKAROUND(__GNUC__, == 2) && BOOST_WORKAROUND(__GNUC_MINOR__, BOOST_TESTED_AT(95)) # ifdef BOOST_NO_ONE_WAY_ITERATOR_INTEROP
// GCC-2.95 eagerly instantiates templated constructors and conversion
// operators in convertibility checks, causing premature errors.
# define BOOST_ITERATOR_CONVERTIBLE(a,b) mpl::true_() # define BOOST_ITERATOR_CONVERTIBLE(a,b) mpl::true_()
# else # else
# define BOOST_ITERATOR_CONVERTIBLE(a,b) is_convertible<a,b>() # define BOOST_ITERATOR_CONVERTIBLE(a,b) is_convertible<a,b>()