|
Boost : |
From: Joel de Guzman (joel_at_[hidden])
Date: 2007-11-21 21:31:39
Joel de Guzman wrote:
> shunsuke wrote:
>> Joel de Guzman wrote:
>>> shunsuke wrote:
>>>> Hi,
>>>>
>>>> I'm trying to fix ticket #1396: http://svn.boost.org/trac/boost/ticket/1396
>>>> Any hint?
>>> I just replied to that in the ticket :-) HTH.
>> Hmm, your `identity` implementation seems wrong.
>> `result<Fun(int)>` invocation means that the argument is rvalue
>> by the definition of result_of behavior.
>> Therefore, you can't return mutable reference to `int`.
>
> Well, it's just for that specific case. Did you intend the
> transform to be generic? I didn't think so when you had
> it hard coded to int. I guess, it really depends on what
> your intent is. A transform cannot, in general, return a
> reference. What if the input is computed on the fly,
> like, say:
>
> mpl::vector_c<int, 1, 2, 3>
Here's a more generic identity transform that works for
mpl sequences too, FWIW (attached test in the trac ticket):
struct identity
{
template<class FunCall>
struct result;
template <class Fun, class T>
struct result<Fun(T)>
{
typedef T type;
};
template <class T>
T& operator()(T& val) const
{
return val;
}
template <class T>
T const& operator()(T const& val) const
{
return val;
}
};
Regards,
-- Joel de Guzman http://www.boost-consulting.com http://spirit.sf.net
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk