Boost logo

Boost :

Subject: Re: [boost] Conflicts when building libraries at root
From: Edward Diener (eldiener_at_[hidden])
Date: 2015-03-10 10:36:56


On 3/10/2015 1:54 AM, Damien Buhl wrote:
> On 09/03/2015 23:20, Edward Diener wrote:
>> On 3/9/2015 5:09 PM, Andrey Semashev wrote:
>> [...]
>>>
>>> There weren't any warnings before. Is this a result of a change in
>>> Boost.PP?
>>
>> Yes, but they were already in 1.57. The changes added some new
>> (BOOST_PP_IS_BEGIN_PARENS) and better functionality (the internal
>> BOOST_PP_IS_EMPTY) to Boost PP, as well as fixing some corner cases with
>> VC++ I discovered when testing VMD.
>
> The reason why this happens more in this build, is that the new
> BOOST_FUSION_ADAPT macros uses BOOST_PP_IS_EMPTY for each field member
> now. This is used to determine if the type was provided or has to be
> deduced.
>
> In all the test I ran I got no warning under VC++, but this was on a
> pretty new version. And some of my test were run before 1.57.

The BOOST_PP_IS_EMPTY macro is undocumented in Boost PP and therefore
was not meant to be used outside the library. I actually changed it to
be much more reliable when using variadic macros, but unfortunately that
mean that VC++ puts out more spurious warning messages.

Honestly just getting VC++ to work properly in Boost PP and VMD is hard
enough. Fixing VC++ warning messages, when there is nothing wrong, is
nearly impossible. I understand they are irritating but they are totally
false also. They are part of VC++'s non-conformant C++ preprocessor.

>
>>
>> Turning off C4003 globally for VC++ is the only solution to the VC++
>> warnings I could ever discover. I attempted to turn off the warnings in
>> the macros where they occur, but VC++ just ignores that. Evidently the
>> warnings can only be turned off globally or possibly at the very
>> top-level macro which eventually causes them.
>
> Do you think I could add specific pragmas to disable C4003 where I use
> BOOST_PP_IS_EMPTY ?

You can try it by surrounding the top-level macro, which eventually
calls BOOST_PP_EMPTY, with the appropriate VC++ pragmas to turn off the
warning. But even that may not work with VC++.

I tried to use the appropriate VC++ pragmas at the Boost PP level to
turn off the warnings but it did not succeed.


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