Boost logo

Boost Users :

Subject: Re: [Boost-users] [lambda] Using a reference in an expression
From: Steven Watanabe (watanabesj_at_[hidden])
Date: 2012-09-13 00:07:28


AMDG

On 09/12/2012 12:14 PM, Bill Buklis wrote:
> How does one use a reference in a lambda expression? The documentation
> says that "var" does, but it clearly doesn't.
>

var does work. The argument to operator<<
is passed by reference correctly. The
error is that the return type is deduced as
sample instead of sample&. Try wrapping
the expression in bll::ret or look up
how to specify the return type in the
docs. I don't remember off the top of my
head what you need to specialize.

> For example this fails to compile because it can't access the copy
> constructor:
>
> #include <boost/lambda.hpp>
> namespace bll = boost::lambda;
>
> class sample
> {
> public:
> sample()
> {
> }
> sample& operator<<( int )
> {
> return(*this);
> }
>
> private:
> sample( const sample& );
> };
>
> void test()
> {
> typedef std::vector<int> V;
>
> V v;
> sample s;
>
> std::for_each(v.begin(), v.end(), bll::var(s) << bll::_1);
> };
>

In Christ,
Steven Watanabe


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net