Boost logo

Boost Users :

Subject: Re: [Boost-users] Can not compile a program that uses typeofpackage by gcc?
From: Peter Dimov (pdimov_at_[hidden])
Date: 2008-10-23 08:28:11


Peng Yu:

> On Wed, Oct 22, 2008 at 9:28 PM, Steven Watanabe <watanabesj_at_[hidden]>
> wrote:
>> AMDG
>>
>> Peng Yu wrote:
>>>
>>> Because of a bug in GCC, BOOST_TYPEOF (which essentially is a macro
>>> for 'typeof') does not work for the attached code. I tried GCC 4.1.1,
>>> somebody else tried GCC 4.3.0. Neither of them work for the attached
>>> code.
>>>
>>
>> What attached code?
>
> Sorry, I forgot to attach the code. Here is the attached code.

This is not what Steven meant. It was probably the use of the term "traits"
that threw you away. multiply_traits is not a traits class; it's just an
implementation detail that places a level of indirection between typeof and
the signature.

Wherever you need to use

BOOST_TYPEOF( T1() * T2() )

in a function signature, you replace it with

typename multiply_helper<T1,T2>::type

where

template<class T1, class T2> struct multiply_helper
{
    typedef BOOST_TYPEOF( T1() * T2() ) type;
};

Nobody specializes multiply_helper. It just moves the typeof a bit to
satisfy the compiler.

The underlying reason for all this dance is that compilers cannot mangle an
arbitrary expression into a function name, and typeof allows one to put
arbitrary expressions in signatures.

--
Peter Dimov
http://www.pdplayer.com 

Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net