Metaprogramming – A Deep Dive