Subject: Re: [boost] [accumulators] broken on msvc
From: Andrey Semashev (andrey.semashev_at_[hidden])
Date: 2014-06-15 17:20:52
On Sunday 15 June 2014 21:18:12 JÃ¼rgen Hunold wrote:
> Am Sonntag, 15. Juni 2014, 20:23:43 schrieb Andrey Semashev:
> > On Sun, Jun 15, 2014 at 8:03 PM, JÃ¼rgen Hunold <jhunold_at_gmx.eu> wrote:
> > > My own code broke with an identical message sometime last week.
> > > Any ideas?
> > I think there's a missing #include <boost/preprocessor/cat.hpp> in
> > boost/accumulators/accumulators_fwd.hpp. There is another use of
> > BOOST_PP_CAT in boost/accumulators/numeric/detail/function_n.hpp but
> > it has the #include. I don't see how this could be related to
> > boost/accumulators/framework/accumulators/reference_accumulator.hpp
> > though.
> As there are no changes in accumulators I've trace the bug back to
> preprocessor. Bisecting the error leads to:
> > c66ea5871fd44274f681f02323c4d46bdf394c7c is the first bad commit
> > commit c66ea5871fd44274f681f02323c4d46bdf394c7c
> > Author: Edward Diener <eldiener_at_[hidden]>
> > Date: Wed Apr 30 16:06:49 2014 -0400
> > Addition of is_empty tests and changes to rem processing as a
> > workaround
> > to VC++ problem.
> the culprit might be this change, which moves cat.hpp out of scope for msvc:
> diff --git a/include/boost/preprocessor/facilities/is_empty.hpp
> index b1094d8..e7f821f 100644
> --- a/include/boost/preprocessor/facilities/is_empty.hpp
> +++ b/include/boost/preprocessor/facilities/is_empty.hpp
> @@ -22,10 +22,13 @@
> # else
> # include <boost/preprocessor/config/config.hpp>
> -# include <boost/preprocessor/cat.hpp>
> +# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC() &&
> ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MWCC()
> # include <boost/preprocessor/tuple/elem.hpp>
> # include <boost/preprocessor/facilities/empty.hpp>
> +# else
> +# include <boost/preprocessor/cat.hpp>
> # include <boost/preprocessor/detail/split.hpp>
> +# endif
> # /* BOOST_PP_IS_EMPTY */
> The question remains: Who fixes this where?
As far as I can see, is_empty.hpp does not use BOOST_PP_CAT when it doesn't
include it, so the header is correct. Accumulators should include cat.hpp
whenever it uses BOOST_PP_CAT, so at least accumulators_fwd.hpp has a bug.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk