+// Compiler options: -warnaserror
+
using System;
+enum E { Item };
+
public interface IFoo<T>
{ }
{
return x is IFoo<T>;
}
+
+ 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<T> where T : struct
+{
+ public bool Foo ()
+ {
+ object o = null;
+ return o is System.Nullable <T>;
+ }
}
class X
{
- static void Main ()
+ public static bool TestA (object o)
+ {
+ return o is int?;
+ }
+
+ public static bool TestB<T> (T o)
{
- Foo<int>.Test (3);
+ 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<T> (E e) where T : struct
+ {
+ return e is T;
+ }
+
+ public static int Main ()
+ {
+ if (Foo<int>.Test (3))
+ return 1;
+
+ if (!Foo<int>.Test())
+ return 2;
+
+ // False expected int? != null
+ if (Foo<int?>.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<int> (E.Item))
+ return 9;
+
+ Console.WriteLine ("OK");
+ return 0;
}
}
+