Modern C++ Design: Generic Programming and Design Patterns Applied