Metaprogramming in C++