Boost logo

Boost :

Subject: Re: [boost] [result_of] Regression: compilation errors on C++03 compilers when defining BOOST_RESULT_OF_USE_DECLTYPE
From: Michel Morin (mimomorin_at_[hidden])
Date: 2012-04-25 09:28:56


Eric Niebler wrote:
> On 4/24/2012 3:14 PM, Michel Morin wrote:
>> If we define BOOST_RESULT_OF_USE_DECLTYPE,
>> boost::result_of tries to use decltype-based implementation
>> even on C++03 compilers. This causes compilation errors
>> and it is a regression on C++03 compilers.
>>
>> Is it intentional change?
>
> I did intend this change.

I think this breaks too much code. Every code that
(directly or indirectly) includes boost::result_of
with `#define BOOST_RESULT_OF_USE_DECLTYPE`
breaks in C++03.

> My thinking was: if Boost.Config is out of
> date or wrong about the presence of decltype for a particular tool
> chain, there should be a way for users to override it.

This should be the work of Boost.Config. Indeed, Boost.Config
has several options to deal with this kind of situations.
For example, we can use the following approach:

1. Prepare a user-supplied header for the compiler (say, new_clang),

    // .../new_clang.hpp
    #include <boost/config/compiler/clang.hpp>
    #undef BOOST_NO_DECLTYPE

2. Compile with `-DBOOST_COMPILER_CONFIG=".../new_clang.hpp"`.

This approach does not need to modify the Boost.Config's code or
the user code at all (other than preparing a user-supplied header).

Regards,
Michel


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