The Boost C++ Libraries: Generic Programming