Because the only way to do metaprogramming in C++ is via the type system. Thismakes it so you need to implement 'functions' as types.
> What does that mean
Have you ever noticed that the (compile time) "rules" for interacting with templated functions are somewhat different from those of non-templated functions? I don't know if "functions as types" is entirely fair but there is definitely some weirdness.