Boost logo

Boost :

From: John E. Potter (jpotter_at_[hidden])
Date: 2000-12-31 20:44:37

On Fri, 29 Dec 2000, Arun Sivaramakrishnan wrote:

> Jeremy wrote:
> >
> > If you want to use a function returning a reference, use projection
> > iterator instead of transform.
> Same problem.

Not really. Transform has value semantics and projection has reference

> Since we cannot have pointer to references or reference to references
> there are compiler errors when AdaptableUnaryFunction
> returns a reference type.
> As Dave said, we do need specializations to overcome this problem
> atleast for some compilers.

This is a lack of documentation. Projection_iterator has reference
semantics always. There is a general problem with reference template
parameters. Vector<int&>? Set<int&>? They just don't work. But,

struct RefFunc : public unary_function<SomeThing, int> {
   int& operator() (SomeThing& st) { return st.someIntField; }

works fine with both std::unary_function and projection_iterator. It
is a lie which works well. The only purpose of std::unary_function is
to extract the correct value_type. Reference and pointer are always
value_type& and value_type*. The function object must have reference

Improvements welcome. It could make transform and projection one


Boost list run by bdawes at, gregod at, cpdaniel at, john at