//@ known-bug: #108499 // at lower recursion limits the recursion limit is reached before the bug happens #![recursion_limit = "2000"] // this will try to calculate 3↑↑3=3^(3^3) type Test = <() as Op<((), ()), [[[(); 0]; 0]; 0], [[[(); 0]; 0]; 0], [[[[(); 0]; 0]; 0]; 0]>>::Result; use std::default::Default; fn main() { // force the compiler to actually evaluate `Test` println!("{}", Test::default()); } trait Op { type Result; } // this recursive function defines the hyperoperation sequence, // a canonical example of the type of recursion which produces the issue // the problem seems to be caused by having two recursive calls, the second // of which depending on the first impl< X: Op<(X, Y), A, [B; 0], [C; 0]>, Y: Op<(X, Y), A, X::Result, C>, A, B, C, > Op<(X, Y), A, [[B; 0]; 0], [C; 0]> for () { type Result = Y::Result; } // base cases impl Op for () { type Result = [B; 0]; } impl Op for () { type Result = [A; 0]; } impl Op for () { type Result = A; }