Boost logo

Boost :

From: Tobias Schwinger (tschwinger_at_[hidden])
Date: 2007-01-27 12:27:18


shunsuke wrote:
> Peter Dimov wrote:
>> shunsuke wrote:
>>> Hi, gurus.
>>>
>>> I have one question about 'result_of':
>>>
>>>
>>> template<class F>
>>> struct forward
>>> {
>>> template<class A>
>>> // typename boost::result_of<F(A&)>::type // (1)
>>> typename boost::result_of<F const(A&)>::type // (2)
>>> operator()(A& a) const
>>> {
>>> return m_f(a);
>>> }
>>>
>>> explicit forward(F f) : m_f(f)
>>> { }
>>>
>>> private:
>>> F m_f;
>>> };
>>>
>>>
>>> (1) or (2).. which is right?
>> (2) is right because m_f is const in operator().

...unless F is a reference.

>>
>>> In fact, (2) fails to compile if 'F' is a function pointer type;
>>> because const function-pointer specialization is missing.
>> This is a bug in boost::result_of.
>
> Hmm, the result_of revolution is painful...

FunctionTypes provides a reimplementation of result_of (as one of its
examples) that can handle top-level cv-qualification correctly.

      http://tinyurl.com/qaf5f - zip archive

I replaced my local copy with it as boost::result_of was completely
broken, recently (renaming "namespace example" to "namespace boost") and
didn't experience any problems.

We can eventually replace boost::result_of with it, once FT is in and
testing is back for the HEAD revision...

(BTW: the GCC configuration of FT has been fixed, so the problems
reported during the review should be gone.)

Regards,
Tobias


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