// error-pattern: overly deep expansion // issue 2258 trait to_opt { fn to_option() -> Option; } impl uint: to_opt { fn to_option() -> Option { Some(self) } } impl Option: to_opt { fn to_option() -> Option> { Some(self) } } fn function(counter: uint, t: T) { if counter > 0u { function(counter - 1u, t.to_option()); } } fn main() { function(22u, 22u); }