
Hi, I would like to iterate over a sequence and preserve the
reference/const/non-const of the elements. That is say I have a sequence like this:
tuple
seq; I would like to this to be true:
typeof(deref(begin(seq))) == int& typeof(deref(next(begin(seq)))) == int&&
It seems fusion sequences always return a const reference to the element. Is there a workaround to get it to work like this?
Trust me, you don't want that, for roughly the same reason you don't want regular sequence rvalues to have rvalue-returning iterators: https://groups.google.com/d/msg/comp.lang.c++.moderated/1BwNTHCFiOs/L1T3WC9T...
I can see how that would be bad. Im using it to invoke functions which wouldn't be a problem for that, but other use cases would cause problems. Right now, it won't return a non-const reference from the iterator for tuples.
Or is this just not possible with Boost.Fusion?
I think you'd need to create your own iterator fusion-style iterator for this purpose.
Furthermore, I would like to use the transformation algorithms (especially push_back, and push_front) and still preserve the reference type.
Sorry, I don't know what that means. How could using an algorithm change a sequence's (or iterator's?) reference type?
Well for example in push_back, it adds const to the sequence like this:
result_of::push_back