From: David Abrahams (david.abrahams_at_[hidden])
Date: 2002-02-12 10:38:03
----- Original Message -----
From: "rogeeff" <rogeeff_at_[hidden]>
> This error basicly means that iterator_aadaptor for some (magic)
> resons deduced that resulting value type is std::string const* while
> it should be std::string const.
Simplifying your error message, I see:
pointer_to_unary_function<personnel_record const &, string const
, string const & // <- value
, string const * & // <- reference
, string const ** // <- pointer
So it looks really strange to me. make_projection_iterator just passes
value& as the reference parameter to iterator_adaptor. How (string const&)&
==> string const*& is beyond me. This part appears to be nothing more than a
> Other compilers give me other errors. It seems that the root
> problem is that pointer_to_unary function incorrectly define
> result_type. While all others functors that returns reference (like
> identity, select1st,select2nd ) define result_type as T if operator()
> returns T const&, pointer_to_unary_function automatically propogate
> result type inherited from its argument, i.e. result_type is defined
> like T const&.
That's a known issue with some of the standard adaptors. We could adjust for
it by stripping the reference from the type, but unfortunately since you're
using MSVC that wouldn't help you.
> Could we use transforming type_traits here and define
> more smart ptr_fun or I just missing something?
I don't know what that means.
You can always declare the iterator_adaptor type yourself, explicitly:
pointer_to_unary_function<personnel_record const &, std::string
const &> >
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk