C++ Templates: The Complete Guide