Boost logo

Boost :

Subject: Re: [boost] Clang 4.0.0 MPL error in Boost next.hpp and prior.hpp
From: Peter Dimov (lists_at_[hidden])
Date: 2017-03-25 15:30:20


Paul A. Bristow wrote:

> In file included from I:\modular-boost\boost/mpl/next.hpp:17:
> I:\modular-boost\boost/mpl/next_prior.hpp:44:23: error: too many arguments
> provided to function-like macro invocation
> BOOST_MPL_AUX_NA_SPEC(1, next)
> ^

I tried to compile

#include <boost/mpl/list.hpp>
#include <boost/mpl/push_front.hpp>

int main()
{
    namespace mpl = boost::mpl;

    using L = mpl::list<>;
    using L2 = mpl::push_front<L, void>;
}

with the build-in Clang/C2, hit

1>../boost-git/boost\boost/mpl/next_prior.hpp(44,1): error : pasting formed
'BOOST_PP_TUPLE_ELEM_O_3(', an invalid preprocessing token
[-Winvalid-token-paste]
1>BOOST_MPL_AUX_NA_SPEC(1, next)

Tried

#define BOOST_PP_CONFIG_FLAGS() 1

at the top, same. The "strict" PP configuration is used, it just doesn't
work for some reason I couldn't figure out. It's possible
that -fms-extensions also changes the preprocessor and this breaks PP, but
without it, MS's headers don't compile.

If you tell MPL to not use PP though:

#include <boost/mpl/aux_/config/preprocessor.hpp>
#undef BOOST_MPL_CFG_NO_OWN_PP_PRIMITIVES

this simple example works. I've no idea whether more complex ones will.

But if you don't insist on an MS-compatible Clang and can stomach the old
and busted 3.9, you can just use the Cygwin Clang. That's what I do.


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk