In reply to Sean Rees.

Sean,

When we started we were trying to give similar looking models to C++ developers and .Net developers. This iteration model is based on the syntax of Microsoft's IEnumerator interface, http://msdn.microsoft.com/en-us/library/system.collections.ienumerator(v=vs.110).aspx

This gave us what we were after.

Another goal, which we didn't achieve was to be STL agnostic. The std::string internal structure changed between VS2008 and VS2010, so we wanted to stay clear of passing those types from our component back to the client because it would cause a crash when it crossed the boundary and was destroyed if one side was VS2010 and the other VS2008. We tried a few things, but the only true way to achieve true binary compatibility was to use a ref counted system that guaranteed construction and deletion happened in our space, but ref counted systems are painful to pass on to users of your system.

In the end we wanted something that was easy to use and consistent across all of our collections. This was it.