Merge pull request #5560 from kumpera/wasm-work-p3
[mono.git] / mcs / tests / gtest-544.cs
1 using System;
2
3 public abstract class A<T>
4 {
5         public abstract G Foo<G> () where G : T;
6         
7         public virtual G Foo2<G> () where G : T
8         {
9                 return default (G);
10         }
11 }
12
13 public class B : A<int?>
14 {
15         public override G Foo<G> ()
16         {
17                 return new G ();
18         }
19         
20         public override G Foo2<G> ()
21         {
22                 return base.Foo2<G> ();
23         }
24 }
25
26 abstract class A2<T>
27 {
28         public abstract void Foo<U> () where U : struct, T;
29 }
30
31 class B2 : A2<System.ValueType>
32 {
33         public override void Foo<Y> ()
34         {
35         }
36 }
37
38 abstract class A3<T>
39 {
40         public abstract void Foo<U> () where U : class, T;
41 }
42
43 class B3 : A3<System.Object>
44 {
45         public override void Foo<Y> ()
46         {
47         }
48 }
49
50 class Program
51 {
52         public static int Main ()
53         {
54                 var b = new B ();
55                 if (b.Foo<int?> () == null)
56                         return 0;
57                 
58                 b.Foo2<int?> ();
59                 
60                 var b2 = new B2 ();
61                 b2.Foo<byte> ();
62                 
63                 var b3 = new B3 ();
64                 b3.Foo<string> ();
65                 
66                 return 1;
67         }
68 }