diff --git a/include/boost/fusion/container/vector/vector.hpp b/include/boost/fusion/container/vector/vector.hpp index 6c9c44fe..65bffd0b 100644 --- a/include/boost/fusion/container/vector/vector.hpp +++ b/include/boost/fusion/container/vector/vector.hpp @@ -278,7 +278,6 @@ namespace boost { namespace fusion }; } // namespace boost::fusion::vector_detail - // This class provides backward compatibility: vector. template struct vector : vector_detail::vector_data< diff --git a/include/boost/fusion/sequence/convert.hpp b/include/boost/fusion/sequence/convert.hpp index b367714c..534d991a 100644 --- a/include/boost/fusion/sequence/convert.hpp +++ b/include/boost/fusion/sequence/convert.hpp @@ -8,6 +8,14 @@ #define FUSION_CONVERT_10022005_1442 #include +#if BOOST_WORKAROUND(BOOST_GCC, < 30500) +#include +#include +#define BOOST_FUSION_WA_GCC34(type1, type2) \ + boost::lazy_disable_if, type1, type2> +#else +#define BOOST_FUSION_WA_GCC34(type1, type2) type1, type2 +#endif namespace boost { namespace fusion { @@ -32,7 +40,7 @@ namespace boost { namespace fusion template BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED - inline typename result_of::convert::type + inline typename BOOST_FUSION_WA_GCC34(result_of::convert)::type convert(Sequence& seq) { typedef typename result_of::convert::gen gen; @@ -49,4 +57,5 @@ namespace boost { namespace fusion } }} +#undef BOOST_FUSION_WA_GCC34 #endif diff --git a/include/boost/fusion/view/iterator_range/detail/segmented_iterator_range.hpp b/include/boost/fusion/view/iterator_range/detail/segmented_iterator_range.hpp index d35e580f..4b2c11eb 100644 --- a/include/boost/fusion/view/iterator_range/detail/segmented_iterator_range.hpp +++ b/include/boost/fusion/view/iterator_range/detail/segmented_iterator_range.hpp @@ -8,6 +8,7 @@ #define BOOST_FUSION_SEGMENTED_ITERATOR_RANGE_HPP_INCLUDED #include +#include #include #include #include @@ -409,11 +410,14 @@ namespace boost { namespace fusion { namespace detail template < typename StackBegin , typename StackEnd - , bool SameSegment = - result_of::equal_to< + , bool SameSegment +#if !(BOOST_WORKAROUND(BOOST_GCC, >= 40000) && BOOST_WORKAROUND(BOOST_GCC, < 40200)) + = result_of::equal_to< typename StackBegin::car_type::begin_type , typename StackEnd::car_type::begin_type - >::type::value> + >::type::value +#endif + > struct make_segmented_range_reduce2 { typedef @@ -480,7 +484,14 @@ namespace boost { namespace fusion { namespace detail template struct make_segmented_range_reduce - : make_segmented_range_reduce2 + : make_segmented_range_reduce2= 40000) && BOOST_WORKAROUND(BOOST_GCC, < 40200) + , result_of::equal_to< + typename StackBegin::car_type::begin_type + , typename StackEnd::car_type::begin_type + >::type::value +#endif + > {}; template diff --git a/include/boost/fusion/view/single_view/detail/next_impl.hpp b/include/boost/fusion/view/single_view/detail/next_impl.hpp index 41c658f3..55a4ff11 100644 --- a/include/boost/fusion/view/single_view/detail/next_impl.hpp +++ b/include/boost/fusion/view/single_view/detail/next_impl.hpp @@ -39,7 +39,10 @@ namespace boost { namespace fusion static type call(Iterator const& i) { - BOOST_STATIC_ASSERT((type::position::value < 2)); + // Workaround for ICE on GCC 4.0.0. + // see https://svn.boost.org/trac/boost/ticket/5808 + typedef typename type::position position; + BOOST_STATIC_ASSERT((position::value < 2)); return type(i.view); } }; diff --git a/test/sequence/std_tuple.cpp b/test/sequence/std_tuple.cpp index 2495fa55..257fd850 100644 --- a/test/sequence/std_tuple.cpp +++ b/test/sequence/std_tuple.cpp @@ -27,7 +27,7 @@ main() { // conversion vector to std tuple - std::tuple t = convert(make_vector(123, "Hola!!!")); + std::tuple t = convert(make_vector(123, std::string("Hola!!!"))); BOOST_TEST(std::get<0>(t) == 123); BOOST_TEST(std::get<1>(t) == "Hola!!!"); }