From: Peter Dimov (pdimov_at_[hidden])
Date: 2004-04-13 05:35:46
Thorsten Ottosen wrote:
> "Peter Dimov" <pdimov_at_[hidden]> wrote in message
>> Thorsten Ottosen wrote:
>>>> Why should it not compile?
>>> consider instead
>>> void write_to( string& s )
>>> s += " foo";
>>> string s = "bar";
>>> bind( write_to, s )();
>>> cout << s; // won't print "bar foo"
>> That's how bind works. All arguments in "bind(write_to, s)" are
>> copied, including 'write_to'. If you make 'write_to' a stateful
>> function object, "bind(write_to, s)()" won't update 'write_to'
> But isn't it possible to reject compiling the above example? It's
> really not what
> I would expect people to expect, especially since bind(write,_1)(s)
Yes, of course it is possible to reject the example. But I don't want to
reject it. It's useful.
bind(write, _1)(s) is a false analogy. bind is never used like that outside
of toy illustrative examples. You always pass bind(write, _1) to someone
else, and bind(f, a) always makes copies of f and a for lifetime reasons,
regardless of their types.
Consider using lambda::bind, which fails the above example. Isn't
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk