https://pastebin.com/vzp5ha1y
и попросите дождаться, пока он скомпилируется.
Конечно, это очень вырожденный случай. Компилятору здесь как минимум нужно выписать тип в виде строки (чтобы использовать
reflect). При этом для любого типа T верно, что func(a, b T) перепишется в func(a T, b T). Таким образом, количество раз, которое мы выписали T, удвоилось. Вкладывая так func(a, b T) друг в друга много раз, мы получаем, что строка с записью типа растет экспоненциально быстро, и компилятор не осиливает.