Correct; it is not fixed. If you look in the upstream svn changeset https://svn.boost.org/trac/boost/changeset/49257 linked to from https://svn.boost.org/trac/boost/ticket/2069 it has some fixes that is not in the included patch. I've attached an updated patch.
On another note; there is a huge amount of unrelated white-space fixing in the gcc-mpl patch; a cleanup of it wouldn't hurt. Apart from the mpl fixes another generic GCC 4.4 fix is needed as well. Also attached as a new patch. Regards, Andreas -- ,-¤. Kubuntu Linux ¤ ; http://www.kubuntu.org `-¤' Linux for Human Beings
Fix for #505597 (upstream https://svn.boost.org/trac/boost/ticket/2069) Upstream patch https://svn.boost.org/trac/boost/attachment/ticket/2069/0001-boost.mpl-gcc-4.4-fixes.patch Index: boost1.35-1.35.0-10ubuntu1/boost/mpl/apply.hpp =================================================================== --- boost1.35-1.35.0-10ubuntu1.orig/boost/mpl/apply.hpp 2009-05-10 19:25:36.000000000 +0200 +++ boost1.35-1.35.0-10ubuntu1/boost/mpl/apply.hpp 2009-05-10 19:28:25.000000000 +0200 @@ -8,8 +8,8 @@ // Copyright Aleksey Gurtovoy 2000-2004 // -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // See http://www.boost.org/libs/mpl for documentation. @@ -85,7 +85,7 @@ BOOST_PP_COMMA_IF(n) \ BOOST_MPL_PP_PARTIAL_SPEC_PARAMS(n, param, def) \ /**/ - + # define AUX778076_APPLY_N_SPEC_PARAMS(n, param) \ BOOST_MPL_PP_ENUM(BOOST_PP_INC(n), param) \ /**/ @@ -112,7 +112,7 @@ typename F, AUX778076_APPLY_DEF_PARAMS(typename T, na) > struct apply - : aux::apply_chooser< + : aux::apply_chooser< aux::apply_count_args< AUX778076_APPLY_PARAMS(T) >::value >::template result_< F, AUX778076_APPLY_PARAMS(T) >::type { @@ -135,7 +135,8 @@ ///// iteration, depth == 1 -#elif BOOST_PP_ITERATION_DEPTH() == 1 +#else +#if BOOST_PP_ITERATION_DEPTH() == 1 # define i_ BOOST_PP_FRAME_ITERATION(1) @@ -144,14 +145,14 @@ > struct BOOST_PP_CAT(apply,i_) #if !BOOST_WORKAROUND(BOOST_MSVC, < 1300) - : BOOST_PP_CAT(apply_wrap,i_)< + : BOOST_PP_CAT(apply_wrap,i_)< typename lambda<F>::type AUX778076_APPLY_N_COMMA_PARAMS(i_, T) > { #else { - typedef typename BOOST_PP_CAT(apply_wrap,i_)< + typedef typename BOOST_PP_CAT(apply_wrap,i_)< typename lambda<F>::type AUX778076_APPLY_N_COMMA_PARAMS(i_, T) >::type type; @@ -222,4 +223,5 @@ # undef i_ +#endif #endif // BOOST_PP_IS_ITERATING Index: boost1.35-1.35.0-10ubuntu1/boost/mpl/apply_wrap.hpp =================================================================== --- boost1.35-1.35.0-10ubuntu1.orig/boost/mpl/apply_wrap.hpp 2009-05-10 19:25:36.000000000 +0200 +++ boost1.35-1.35.0-10ubuntu1/boost/mpl/apply_wrap.hpp 2009-05-10 19:28:25.000000000 +0200 @@ -8,8 +8,8 @@ // Copyright Aleksey Gurtovoy 2000-2004 // -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // See http://www.boost.org/libs/mpl for documentation. @@ -78,7 +78,8 @@ ///// iteration, depth == 1 -#elif BOOST_PP_ITERATION_DEPTH() == 1 +#else +#if BOOST_PP_ITERATION_DEPTH() == 1 # define i_ BOOST_PP_FRAME_ITERATION(1) @@ -140,7 +141,7 @@ : F::template apply< AUX778076_APPLY_WRAP_PARAMS(i_, T) > { #else -{ +{ typedef typename F::template apply< AUX778076_APPLY_WRAP_PARAMS(i_, T) >::type type; @@ -169,8 +170,8 @@ # undef i_ ///// iteration, depth == 2 - -#elif BOOST_PP_ITERATION_DEPTH() == 2 +#else +#if BOOST_PP_ITERATION_DEPTH() == 2 # define j_ BOOST_PP_FRAME_ITERATION(2) @@ -197,4 +198,6 @@ # undef j_ +#endif +#endif #endif // BOOST_PP_IS_ITERATING Index: boost1.35-1.35.0-10ubuntu1/boost/mpl/aux_/full_lambda.hpp =================================================================== --- boost1.35-1.35.0-10ubuntu1.orig/boost/mpl/aux_/full_lambda.hpp 2009-05-10 19:25:36.000000000 +0200 +++ boost1.35-1.35.0-10ubuntu1/boost/mpl/aux_/full_lambda.hpp 2009-05-10 19:28:25.000000000 +0200 @@ -8,8 +8,8 @@ // Copyright Aleksey Gurtovoy 2001-2004 // -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // See http://www.boost.org/libs/mpl for documentation. @@ -127,7 +127,7 @@ { typedef true_ is_le; typedef mpl::arg<N> result_; // qualified for the sake of MIPSpro 7.41 - typedef mpl::protect<result_> type; + typedef mpl::protect<result_> type; }; @@ -181,7 +181,7 @@ typedef typename l1::is_le is_le; typedef bind1< quote1<aux::template_arity>, typename l1::result_ > arity_; typedef lambda< typename if_<is_le,arity_,Arity>::type,Tag2 > l3; - + typedef aux::le_result3<is_le, Tag2, mpl::lambda, l1, l2, l3> le_result_; typedef typename le_result_::result_ result_; typedef typename le_result_::type type; @@ -200,7 +200,7 @@ { typedef lambda< F,Tag2 > l1; typedef lambda< Tag1,Tag2 > l2; - + typedef typename l1::is_le is_le; typedef aux::le_result2<is_le, Tag2, mpl::lambda, l1, l2> le_result_; typedef typename le_result_::result_ result_; @@ -227,7 +227,8 @@ ///// iteration, depth == 1 -#elif BOOST_PP_ITERATION_DEPTH() == 1 +#else +#if BOOST_PP_ITERATION_DEPTH() == 1 #define i_ BOOST_PP_FRAME_ITERATION(1) #if i_ > 0 @@ -254,7 +255,7 @@ typedef F< BOOST_MPL_PP_REPEAT(i_, AUX778076_TYPE, L) > result_; - + typedef result_ type; }; @@ -299,7 +300,7 @@ , AUX778076_LAMBDA_PARAMS(i_, typename T) , typename Tag > -struct lambda< +struct lambda< F<AUX778076_LAMBDA_PARAMS(i_, T)> , Tag AUX778076_ARITY_PARAM(int_<i_>) @@ -315,7 +316,7 @@ typedef aux::BOOST_PP_CAT(le_result,i_)< is_le, Tag, F, AUX778076_LAMBDA_PARAMS(i_, l) > le_result_; - + typedef typename le_result_::result_ result_; typedef typename le_result_::type type; }; @@ -342,9 +343,10 @@ F AUX778076_BIND_N_PARAMS(i_, T) > result_; - + typedef result_ type; }; #undef i_ +#endif #endif // BOOST_PP_IS_ITERATING Index: boost1.35-1.35.0-10ubuntu1/boost/mpl/aux_/numeric_op.hpp =================================================================== --- boost1.35-1.35.0-10ubuntu1.orig/boost/mpl/aux_/numeric_op.hpp 2009-05-10 19:25:36.000000000 +0200 +++ boost1.35-1.35.0-10ubuntu1/boost/mpl/aux_/numeric_op.hpp 2009-05-10 19:28:25.000000000 +0200 @@ -7,8 +7,8 @@ // Copyright Aleksey Gurtovoy 2000-2004 // -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // See http://www.boost.org/libs/mpl for documentation. @@ -71,12 +71,12 @@ namespace boost { namespace mpl { -template< +template< typename Tag1 , typename Tag2 #if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) - , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value - , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value + , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value + , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value > struct AUX778076_OP_IMPL_NAME : if_c< @@ -98,7 +98,7 @@ /// for Digital Mars C++/compilers with no CTPS/TTP support template<> struct AUX778076_OP_IMPL_NAME<na,na> { - template< typename U1, typename U2 > struct apply + template< typename U1, typename U2 > struct apply { typedef apply type; BOOST_STATIC_CONSTANT(int, value = 0); @@ -108,7 +108,7 @@ #if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) template< typename Tag > struct AUX778076_OP_IMPL_NAME<na,Tag> { - template< typename U1, typename U2 > struct apply + template< typename U1, typename U2 > struct apply { typedef apply type; BOOST_STATIC_CONSTANT(int, value = 0); @@ -117,7 +117,7 @@ template< typename Tag > struct AUX778076_OP_IMPL_NAME<Tag,na> { - template< typename U1, typename U2 > struct apply + template< typename U1, typename U2 > struct apply { typedef apply type; BOOST_STATIC_CONSTANT(int, value = 0); @@ -126,7 +126,7 @@ #else template<> struct AUX778076_OP_IMPL_NAME<na,integral_c_tag> { - template< typename U1, typename U2 > struct apply + template< typename U1, typename U2 > struct apply { typedef apply type; BOOST_STATIC_CONSTANT(int, value = 0); @@ -135,7 +135,7 @@ template<> struct AUX778076_OP_IMPL_NAME<integral_c_tag,na> { - template< typename U1, typename U2 > struct apply + template< typename U1, typename U2 > struct apply { typedef apply type; BOOST_STATIC_CONSTANT(int, value = 0); @@ -193,7 +193,7 @@ # else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION /// forward declaration -template< +template< typename BOOST_MPL_AUX_NA_PARAM(N1) , typename BOOST_MPL_AUX_NA_PARAM(N2) > @@ -228,7 +228,7 @@ ) }; -template< +template< typename N1 , typename N2 > @@ -238,7 +238,7 @@ #else // AUX778076_OP_ARITY == 2 -template< +template< typename BOOST_MPL_AUX_NA_PARAM(N1) , typename BOOST_MPL_AUX_NA_PARAM(N2) > @@ -287,7 +287,8 @@ ///// iteration, depth == 1 -#elif BOOST_PP_ITERATION_DEPTH() == 1 +#else +#if BOOST_PP_ITERATION_DEPTH() == 1 # define i_ BOOST_PP_FRAME_ITERATION(1) @@ -308,4 +309,5 @@ # undef i_ +#endif #endif // BOOST_PP_IS_ITERATING Index: boost1.35-1.35.0-10ubuntu1/boost/mpl/bind.hpp =================================================================== --- boost1.35-1.35.0-10ubuntu1.orig/boost/mpl/bind.hpp 2009-05-10 19:25:36.000000000 +0200 +++ boost1.35-1.35.0-10ubuntu1/boost/mpl/bind.hpp 2009-05-10 19:28:25.000000000 +0200 @@ -9,8 +9,8 @@ // Copyright Peter Dimov 2001 // Copyright Aleksey Gurtovoy 2001-2004 // -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // See http://www.boost.org/libs/mpl for documentation. @@ -32,7 +32,7 @@ # include <boost/mpl/aux_/yes_no.hpp> # if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) # include <boost/type_traits/is_reference.hpp> -# endif +# endif #endif #include <boost/mpl/aux_/config/bind.hpp> @@ -173,7 +173,7 @@ #else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION -// agurt, 15/jan/02: it's not a intended to be used as a function class, and +// agurt, 15/jan/02: it's not a intended to be used as a function class, and // MSVC6.5 has problems with 'apply' name here (the code compiles, but doesn't // work), so I went with the 'result_' here, and in all other similar cases template< bool > @@ -185,7 +185,7 @@ }; }; -template<> +template<> struct resolve_arg_impl<true> { template< typename T, AUX778076_BIND_PARAMS(typename U) > struct result_ @@ -200,7 +200,7 @@ // for 'resolve_bind_arg' template< typename T > struct is_bind_template; -template< +template< typename T, AUX778076_BIND_PARAMS(typename U) > struct resolve_bind_arg @@ -211,7 +211,7 @@ # if !defined(BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT) -template< typename T > +template< typename T > struct replace_unnamed_arg_impl { template< typename Arg > struct result_ @@ -221,7 +221,7 @@ }; }; -template<> +template<> struct replace_unnamed_arg_impl< arg<-1> > { template< typename Arg > struct result_ @@ -231,7 +231,7 @@ }; }; -template< typename T, typename Arg > +template< typename T, typename Arg > struct replace_unnamed_arg : replace_unnamed_arg_impl<T>::template result_<Arg> { @@ -247,8 +247,8 @@ template< typename T > aux::no_tag is_bind_helper(protect<T>*); // overload for "main" form -// agurt, 15/mar/02: MSVC 6.5 fails to properly resolve the overload -// in case if we use 'aux::type_wrapper< bind<...> >' here, and all +// agurt, 15/mar/02: MSVC 6.5 fails to properly resolve the overload +// in case if we use 'aux::type_wrapper< bind<...> >' here, and all // 'bind' instantiations form a complete type anyway #if !defined(BOOST_MPL_CFG_NO_BIND_TEMPLATE) template< @@ -274,8 +274,8 @@ { template< typename T > struct result_ { - BOOST_STATIC_CONSTANT(bool, value = - sizeof(aux::is_bind_helper(static_cast<T*>(0))) + BOOST_STATIC_CONSTANT(bool, value = + sizeof(aux::is_bind_helper(static_cast<T*>(0))) == sizeof(aux::yes_tag) ); }; @@ -361,7 +361,8 @@ ///// iteration, depth == 1 -#elif BOOST_PP_ITERATION_DEPTH() == 1 +#else +#if BOOST_PP_ITERATION_DEPTH() == 1 # define i_ BOOST_PP_FRAME_ITERATION(1) @@ -376,7 +377,7 @@ template< typename Tag AUX778076_BIND_N_PARAMS(i_, typename T) > -struct BOOST_PP_CAT(bind,i_)< +struct BOOST_PP_CAT(bind,i_)< BOOST_PP_CAT(quote,i_)<AUX778076_SPEC_NAME,Tag> AUX778076_BIND_N_PARAMS(i_,T) > @@ -441,7 +442,7 @@ /**/ typedef typename BOOST_PP_CAT(apply_wrap,i_)< - f_ + f_ BOOST_PP_COMMA_IF(i_) BOOST_MPL_PP_REPEAT(i_, AUX778076_ARG, t) >::type type; @@ -481,7 +482,7 @@ # if !defined(BOOST_MPL_CFG_NO_BIND_TEMPLATE) # if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) - + #if i_ == BOOST_MPL_LIMIT_METAFUNCTION_ARITY /// primary template (not a specialization!) template< @@ -528,7 +529,8 @@ ///// iteration, depth == 2 -#elif BOOST_PP_ITERATION_DEPTH() == 2 +#else +#if BOOST_PP_ITERATION_DEPTH() == 2 # define j_ BOOST_PP_FRAME_ITERATION(2) # if !defined(BOOST_MPL_CFG_NO_UNNAMED_PLACEHOLDER_SUPPORT) @@ -544,4 +546,6 @@ # endif # undef j_ +#endif +#endif #endif // BOOST_PP_IS_ITERATING Index: boost1.35-1.35.0-10ubuntu1/boost/mpl/aux_/advance_backward.hpp =================================================================== --- boost1.35-1.35.0-10ubuntu1.orig/boost/mpl/aux_/advance_backward.hpp 2009-05-10 19:36:04.000000000 +0200 +++ boost1.35-1.35.0-10ubuntu1/boost/mpl/aux_/advance_backward.hpp 2009-05-10 19:36:40.000000000 +0200 @@ -79,7 +79,8 @@ ///// iteration, depth == 1 -#elif BOOST_PP_ITERATION_DEPTH() == 1 +#else // BOOST_PP_IS_ITERATING +#if BOOST_PP_ITERATION_DEPTH() == 1 #define i_ BOOST_PP_FRAME_ITERATION(1) template<> @@ -121,4 +122,5 @@ # undef AUX778076_ITER_1 # undef AUX778076_ITER_0 +#endif // BOOST_PP_ITERATION_DEPTH() #endif // BOOST_PP_IS_ITERATING Index: boost1.35-1.35.0-10ubuntu1/boost/mpl/aux_/advance_forward.hpp =================================================================== --- boost1.35-1.35.0-10ubuntu1.orig/boost/mpl/aux_/advance_forward.hpp 2009-05-10 19:28:39.000000000 +0200 +++ boost1.35-1.35.0-10ubuntu1/boost/mpl/aux_/advance_forward.hpp 2009-05-10 19:29:32.000000000 +0200 @@ -79,7 +79,8 @@ ///// iteration, depth == 1 -#elif BOOST_PP_ITERATION_DEPTH() == 1 +#else // BOOST_PP_IS_ITERATING +#if BOOST_PP_ITERATION_DEPTH() == 1 #define i_ BOOST_PP_FRAME_ITERATION(1) template<> @@ -120,4 +121,5 @@ # undef AUX778076_ITER_1 # undef AUX778076_ITER_0 +#endif // BOOST_PP_ITERATION_DEPTH() #endif // BOOST_PP_IS_ITERATING Index: boost1.35-1.35.0-10ubuntu1/boost/mpl/unpack_args.hpp =================================================================== --- boost1.35-1.35.0-10ubuntu1.orig/boost/mpl/unpack_args.hpp 2009-05-10 19:29:45.000000000 +0200 +++ boost1.35-1.35.0-10ubuntu1/boost/mpl/unpack_args.hpp 2009-05-10 19:31:03.000000000 +0200 @@ -111,7 +111,8 @@ ///// iteration, depth == 1 -#elif BOOST_PP_ITERATION_DEPTH() == 1 +#else // BOOST_PP_IS_ITERATING +#if BOOST_PP_ITERATION_DEPTH() == 1 # define i_ BOOST_PP_FRAME_ITERATION(1) @@ -143,4 +144,5 @@ # undef i_ +#endif // BOOST_PP_ITERATION_DEPTH() #endif // BOOST_PP_IS_ITERATING
# # Patch: https://svn.boost.org/trac/boost/changeset/42435 # Description: Add missing include to build against GCC 4.4 # Index: boost1.35-1.35.0/boost/test/impl/debug.ipp =================================================================== --- boost1.35-1.35.0.orig/boost/test/impl/debug.ipp 2009-05-10 08:56:51.000000000 +0200 +++ boost1.35-1.35.0/boost/test/impl/debug.ipp 2009-05-10 11:29:49.000000000 +0200 @@ -58,6 +58,7 @@ // STL #include <cstring> #include <map> +#include <cstdio> #include <stdarg.h> // !! ?? cstdarg // SYSTEM API