Boost logo

Boost :

Subject: Re: [boost] [result_of] BOOST_RESULT_OF_USE_DECLTYPE in a C++03 mode with libc++
From: Eric Niebler (eric_at_[hidden])
Date: 2012-10-08 12:25:50

On 10/8/2012 6:08 AM, Michel Morin wrote:
> This is just a small note related to boost::result_of.
> boost::result_of tries to use decltype-based implementation
> (regardless of the compiler's decltype support).
> Surprisingly, in a C++03 mode, libc++ defines `decltype`
> using `__typeof__`:
> Bug 12488 (WONTFIX):
> decltype can be used in C++03 with no errors, no warnings
> So, when used with libc++, boost::result_of can be used with
> BOOST_RESULT_OF_USE_DECLTYPE even in a C++03 mode.

Does __typeof__ have EXACTLY the same semantics as C++11 decltype? Can
it get you either the type and lvalue-ness of an expression, or the
variable's declared type, with an extra set of parens? If the expression
is a function call, does it force the return type to be complete?

We're finding very few compilers have robust-enough implementations of
decltype to flip the result_of switch. I think it's pretty improbable
that a pre-standard hack like __typeof__ would fit the bill.

Eric Niebler
BoostPro Computing

Boost list run by bdawes at, gregod at, cpdaniel at, john at