On 3/10/2015 6:23 AM, Damien Buhl wrote:
On 10/03/2015 09:08, Andrey Semashev wrote:
On Tuesday 10 March 2015 06:54:30 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.
Is it possible to avoid BOOST_PP_IS_EMPTY? For example, use a keyword instead of testing for an empty string?
I'll change this to look at the implication that it has. Not sure it will be better on old compilers like MSVC 8, but perhaps we can avoid some warnings. :p
What is good is that the current code allow this change easily. Because when BOOST_PP_VARIADICS support is active, it wouldn't be needed at all, and when it's not there then it currently only uses BOOST_PP_IS_EMPTY to check if the provided type is a macro which expands to BOOST_PP_EMPTY, namely BOOST_FUSION_ADAPT_AUTO.
So it might be quite easy to replace it to make a check if the provided type is a string equal to BOOST_FUSION_ADAPT_AUTO. Actually it makes even more sense than the check for emptiness.
The only disadvandtage is that the user cannot anymore write nothing instead of the type when he don't have BOOST_PP_VARIADICS support (which is anyway undocumented and not advised).
Otherwise isn't there any possibility to fix the warnings in BOOST_PP_IS_EMPTY? Because the old version of BOOST_PP_IS_EMPTY didn't warn about anything AFAIK when used with a parameter which expands to BOOST_PP_EMPTY().
If you are compiling with VC++ then BOOST_PP_VARIADICS is on by default. Try to specifically turn it off to see if the warnings go away if that is an option. Of course with BOOST_PP_VARIADICS off the variadic support in Boost PP goes away.