Generic programming and the STL : using and extending the C++ Standard Template Library - Austern, Matthew H. (Addison-Wesley, 1999)