The following program ``` Rust use std::mem; pub struct S<T: Tr> { pub f: <T as Tr>::I, } pub trait Tr { type I: Tr; } impl<T: Tr> Tr for S<T> { type I = S<S<T>>; } impl Tr for () { type I = (); } fn foo<T: Tr>() -> usize { mem::size_of::<S<T>>() } fn main() { println!("{}", foo::<S<()>>()); } ``` generates a trans-time stack overflow.