// Type inference when creating delegates using System; delegate int D (string s, int i); delegate int E (); class X { public static T F<T> (string s, T t) { return t; } public static T G<T> () { throw new ArgumentException (); } public static void Main () { D d1 = new D (F<int>); D d2 = new D (F); E e1 = new E (G<int>); } }