Nice error message when no template matches the parameters
Handle classes overrides error messages properly
Remove assertion from unhandled compile time cases
Make TypeVisitor a struct