Boost logo

Boost :

Subject: Re: [boost] [config] Variadic template macros in gcc header
From: Edward Diener (eldiener_at_[hidden])
Date: 2010-11-21 12:49:08


On 11/21/2010 11:15 AM, Daniel James wrote:
> On 21 November 2010 15:35, Edward Diener<eldiener_at_[hidden]> wrote:
>> On 11/21/2010 4:51 AM, Daniel James wrote:
>>>
>>> On 21 November 2010 09:40, John Maddock<boost.regex_at_[hidden]> wrote:
>>>>
>>>> If someone wants to take on the task of getting the release
>>>> branch
>>>> free of the BOOST_HAS_ version, then they can also remove it from
>>>> Boost.Config ;-)
>>>
>>> I tried a while ago but there was some resistance as code using
>>> BOOST_HAS_ will work on a compliant C++03 compiler with an empty
>>> config file.
>>
>> I don't understand your remark.
>
> Take a look at:
>
> https://svn.boost.org/trac/boost/ticket/3986

"On a standard-compliant compiler, shared_ptr supports compilation with
an empty config.hpp. This will no longer be the case after this patch. "

Evidently with an empty config.h using the old BOOST_HAS_ macros neither
BOOST_HAS_VARIADIC_TMPL nor BOOST_HAS_RVALUE_REFS will be defined
therefore causing shared_ptr not to use them. Similarly with an empty
config.h both BOOST_NO_VARIADIC_TEMPLATES and BOOST_NO_RVALUE_REFERENCES
will not be defined causing shared_ptr to use both features even if the
compiler does not support them. That seems to be what Peter Dimov is
saying. But that looks like a problem with all the BOOST_NO_ macros
since an empty config.h will never have any of those macros defined.

But that brings up the question of what is meant by a
"standard-compliant" compiler. If Boost really supposed to be compiled
by a standard-compliant compiler which essentially has an empty config.h
than "standard-compliant" should mean one that supports all the latest
C++0x features in which case variadic templates and rvalue references
are supported and the BOOST_NO_ macro system is entirely correct. But if
"standard-compliant" just means the C++03 standard, then clearly any
compiler needs a config.h and its own compiler header file with the
proper BOOST_NO_ features defined. Or else the BOOST_NO_ system has to
be changed to reflect only C++03 standard features and not the C++0x
features it currently also encompasses.


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