using M; using N; class N { public static foo [A,B] () : void { System.Console.WriteLine ("{0} {1}", typeof (A), typeof (B)); } } class M { public static foo [A] () : void { System.Console.WriteLine (typeof (A)); } } class X1[T] { public override ToString () : string { typeof (T).ToString () } } [Record] struct Qux[T] { x : T; public override ToString () : string { typeof (T).ToString () } } struct Qux2[T] { x : T; public override ToString () : string { typeof (T).ToString () } } foo.[int] (); foo.[int,string] (); System.Console.WriteLine (X1.[int] ()); System.Console.WriteLine (X1.[string] ()); System.Console.WriteLine (Qux.[int] ()); System.Console.WriteLine (Qux.[int] (7)); System.Console.WriteLine (Qux2.[int] ()); /* BEGIN-OUTPUT System.Int32 System.Int32 System.String System.Int32 System.String System.Int32 System.Int32 System.Int32 END-OUTPUT */