
On Thursday 11 March 2010 01:50:14 Joel de Guzman wrote:
On 3/11/2010 12:11 PM, David A. Greene wrote:
For the first attached testcase, can anyone explain why "Doesn't" doesn't?
Because fusion::transform is purely functional --takes its arguments as const and returns a transformed view and returns a view which is also const (immutable). In that regard, fusion is more like MPL (functional) than STL (imperative).
Ok, but if push_back takes an argument by const reference, what's the problem? Is bind() messing things up by creating a function object that expects a non-const reference? push_back isn't altering the sequence in any way so immutability shouldn't be a problem.
I would not expect the second test to compile. But is there some way to bridge the gap between fusion iterators, boost.Range ranges and standard iterators? Is there any way to turn a fusion iterator into a standard- conforming iterator?
There's no way I know that would allow that. First, fusion iterators have different types for each iterator position, unlike STL where begin and end and everything in between have a single iterator type. IOTW, fusion iterators are polymorphic.
Ugh. That makes things difficult then. There's no simple way to define a function that just takes a pair of iterators and does something with them. Surely others have tried to do things like this before. What's the typical solution? -Dave