diff --git a/include/boost/mpl/aux_/range_c/iterator.hpp b/include/boost/mpl/aux_/range_c/iterator.hpp index 1c8b6f0..1177fb9 100644 --- a/include/boost/mpl/aux_/range_c/iterator.hpp +++ b/include/boost/mpl/aux_/range_c/iterator.hpp @@ -64,9 +64,13 @@ template<> struct advance_impl { template< typename Iter, typename Dist > struct apply { - typedef typename Iter::type n_; + typedef typename deref::type n_; +#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) + typedef typename plus_impl + ::template apply::type m_; +#else typedef typename plus::type m_; - +#endif // agurt, 10/nov/04: to be generic, the code have to do something along // the lines below... // @@ -78,7 +82,7 @@ template<> struct advance_impl // ... meanwhile: typedef integral_c< - typename n_::value_type + typename aux::value_type_wknd::type , BOOST_MPL_AUX_VALUE_WKND(m_)::value > result_; diff --git a/include/boost/mpl/aux_/value_wknd.hpp b/include/boost/mpl/aux_/value_wknd.hpp index 9349424..90aecec 100644 --- a/include/boost/mpl/aux_/value_wknd.hpp +++ b/include/boost/mpl/aux_/value_wknd.hpp @@ -69,4 +69,21 @@ template<> struct value_wknd /**/ #endif + +namespace boost { namespace mpl { namespace aux { + +template< typename T > struct value_type_wknd +{ + typedef typename T::value_type type; +}; + +#if defined(BOOST_MPL_CFG_MSVC_ETI_BUG) +template<> struct value_type_wknd +{ + typedef int type; +}; +#endif + +}}} + #endif // BOOST_MPL_AUX_VALUE_WKND_HPP_INCLUDED