
on Sat Mar 31 2012, paul Fultz
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...
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?
Is that possible, through some workarounds? Finally, would it still be fairly efficient when dealing with references, to copy the tuple and make a new tuple when doing algorithms such as push_back or push_front? Or is the lazy evaluation much more efficient than that?
This part is best answered by others. -- Dave Abrahams BoostPro Computing http://www.boostpro.com