support compilers with maximum template recursion depth of 128