diff --git a/include/boost/iterator_adaptors.hpp b/include/boost/iterator_adaptors.hpp index 725bdf4..35b1c56 100644 --- a/include/boost/iterator_adaptors.hpp +++ b/include/boost/iterator_adaptors.hpp @@ -354,7 +354,6 @@ namespace detail { struct operator_arrow_result_generator { typedef operator_arrow_proxy proxy; - // Borland chokes unless it's an actual enum (!) enum { is_input_iter = (boost::is_convertible::value @@ -626,9 +625,16 @@ namespace detail { template struct make_arg { +#ifdef __BORLANDC__ + // Borland C++ doesn't like the extra indirection of is_named_parameter + typedef typename + if_true<(is_convertible::value)>:: + template then::type Make; +#else enum { is_named = is_named_parameter::value }; typedef typename if_true<(is_named)>::template then::type Make; +#endif typedef typename Make::template select::type type; }; @@ -779,7 +785,8 @@ struct iterator_adaptor : { typedef iterator_adaptor self; public: - typedef typename detail::iterator_adaptor_traits_gen::type Traits; + typedef detail::iterator_adaptor_traits_gen TraitsGen; + typedef typename TraitsGen::type Traits; typedef typename Traits::difference_type difference_type; typedef typename Traits::value_type value_type;