using M; using N; class N { public static foo [A,B] () : void { } } class M { public static foo [A] (_ : A) : void { } public static bar () : void {} public static qux[A] () : void {} public static foo2 [A] (_ : A) : void { } } foo.[int] ("foo"); // E: in argument #1.*, needed a int, got string foo.[int,string,string] (); // E: none of the overloads of foo is possibl bar.[int] (); // E: method M.bar\(\) : void takes 0 generic parameters, while 1 was supplied qux.[int,int] (); // E: method M.qux\(\) : void takes 1 generic parameters, while 2 was supplied foo2.[int] ("foo"); // E: in argument #1.*, needed a int, got string 3.[int]; // E: don't know how to apply generic specifier to 3