...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
In 2000 Dave Abrahams was writing an iterator for a container of pointers, which would access the pointed-to elements when dereferenced. Naturally, being a library writer, he decided to generalize the idea and the Boost Iterator Adaptor library was born. Dave was inspired by some writings of Andrei Alexandrescu and chose a policy based design (though he probably didn't capture Andrei's idea very well - there was only one policy class for all the iterator's orthogonal properties). Soon Jeremy Siek realized he would need the library and they worked together to produce a "Boostified" version, which was reviewed and accepted into the library. They wrote a paper and made several important revisions of the code.
Eventually, several shortcomings of the older library began to make the need
for a rewrite apparent. Dave and Jeremy started working at the Santa Cruz C++
committee meeting in 2002, and had quickly generated a working prototype. At
the urging of Mat Marcus, they decided to use the GenVoca/CRTP pattern approach,
and moved the policies into the iterator class itself. Thomas Witt expressed
interest and became the voice of strict compile-time checking for the project,
adding uses of the SFINAE technique to eliminate false converting constructors
and operators from the overload set. He also recognized the need for a separate
iterator_facade
, and factored
it out of iterator_adaptor
.
Finally, after a near-complete rewrite of the prototype, they came up with
the library you see today.
[Coplien, 1995] Coplien, J., Curiously Recurring Template Patterns, C++ Report, February 1995, pp. 24-27.