Win32 has an API ::EnumChildWindows. It is a model of "Iterable".
::EnumChildWindows should have been defined as "Single Pass Range", but Win32 didn't know the concept and cannot even stop the iteration. So we cannot write a wrapper Range for ::EnumChildWindows without additional resources like std::set<HWND>.
I always defined "for_each_toplevel_window" or something using ::EnumChildWindows. If using "Iterable", it could be
I think that "Iterable" has less abstraction, but has more "power" than Container or Range, because "Iterable" can iterate over a range that is difficult to represent by two iterators.
In response to the suggestions by Terje, I have created a downloadable demo of the Iterator concept with library support at http://www.ootl.org . I now also have some documentation at http://www.ootl.org/doc/ .