Merge branch 'cecil-light'
[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 class Program
39 {
40         public static int Main ()
41         {
42                 var b = new B ();
43                 if (b.Foo<int?> () == null)
44                         return 0;
45                 
46                 b.Foo2<int?> ();
47                 
48                 var b2 = new B2 ();
49                 b2.Foo<byte> ();
50                 
51                 return 1;
52         }
53 }