typedef ta[T] = ( T^ value, ); typedef tb[T,U] = ( T^ value, U^#[2] deep, ); typedef tc[T,U] = ( T^ value, (U^#[2] x) deep, ); typedef td[T,U] = ( T^ value, (U^#[2] x)^ deep, ); typedef nested[T] = ( tb[byte,T] inner, ); var int i; var int var^ ip; var float f; var float var^ fp; var byte by; var byte var^ byp; var bool bo; var bool^ bop; () testa() { var ta[int] t; ip = t.value; t.value = ip; t.value = @i; } () testb() { var tb[int,float] t; t.value = ip; float^#[2] arr; t.deep = arr; } () acceptrc((float^#[2] x) param) { } () acceptpc(tc[int,float]^ param) { } () acceptpc2[A,B](tc[A,B]^ param) { } () acceptpc3[A]((A^#[2] x)^ param) { } () testc() { var tc[int,float] t; t.value = ip; var (float^#[2] x) struc; struc = t.deep; acceptrc(struc); acceptrc(t.deep); acceptrc(([@1.23, @4.56],)); acceptpc(@t); acceptpc2[int,float](@t); acceptpc3[float](@t.deep); t.deep = struc; t.deep = ([@1.23, @4.56],); } () testd() { var td[int,float] t; t.value = ip; (float^#[2] x) struc; t.deep = @struc; t.deep = @([@1.23, @4.56],); } () acceptrnested((byte^, bool^#[2])^ param); () acceptpnested(tb[byte,bool]^ param); () testnested() { var nested[bool] t; t.inner.value = byp; bool^#[2] arr; t.inner.deep = arr; acceptrnested(@t.inner); acceptpnested(@t.inner); }