$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
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