// Compiler options: -warnaserror using System; enum E { Item }; public interface IFoo { } public class Foo { public static bool Test (T x) { return x is IFoo; } public static bool Test () { T t = default (T); return t is int; } public static bool TestB () { T t = default (T); return t is int?; } } class Y where T : struct { public bool Foo () { object o = null; return o is System.Nullable ; } } class X { public static bool TestA (object o) { return o is int?; } public static bool TestB (T o) { return o is int[]; } public static int TestC () { int? i = null; if (i is int) { return (int) i; } return 3; } static bool Check1 (E? e) { return e is Enum; } static bool Check2 (E e) where T : struct { return e is T; } public static int Main () { if (Foo.Test (3)) return 1; if (!Foo.Test()) return 2; // False expected int? != null if (Foo.TestB()) return 3; int? i = 0; if (!TestA(i)) return 4; int[] a = new int[0]; if (!TestB(a)) return 5; if (TestC () != 3) return 6; if (Check1 (null)) return 7; if (!Check1 (E.Item)) return 8; if (Check2 (E.Item)) return 9; Console.WriteLine ("OK"); return 0; } }