examples of c++ template metaprogramming