On Monday 20 September 2010 01:08:25 Kagamin wrote: > Jonathan M Davis Wrote: > > delegate by definition has context which is not going to be copied. So, > > any functon pointer or delegate that you have must refer to a function > > which is logically pure, otherwise any algorithm that relies on save is > > not going to work correctly. > > If phobos causes subtle bugs, it's a bug worth filing.
Except that it's not really phobos' fault. The problem is that once part of the state of a struct or class is a delegate, you *can't* copy it. As far as I know, there is no way in the language to do it. A forward range's save property is supposed to give you a copy of the range which copies the state specific to iterating the range such that you can iterate the copy to your heart's content without affecting the original's ability to iterate. But if a delegate is part of the iteration state of a range, and that delegate isn't logically pure, the copy is going to use that delegate and alter the state of the original range, because they share that delegate. I don't think that there's anything Phobos can do about it. It's a limitation of delegates. - Jonathan M Davis
