interface I1 { } struct S1 { } struct S2 { } class C0 { } class C1 { } class C2 : C1, I1 where T2 : struct { } class C3 where T3 : class { } class C4 where T4 : C1 { } class C5 where T5 : C1, I1 { } class C6 where T6a : C1 where T6b : T6a, I1 where T6c : C3 where T6d : struct { } class ConstructSomeTypes { C1 f1; C2 f2; C3> f3; C3> f4; C4> f5; C5> f6; C6, C2, C3>, S1> f7; void M(C6, Tm, C3, S2> x, C6, C2, C3>, S2> y) where Tm : C2 { } } class Tuples { static (T8, int) t1; static (string, int) t2; static (string, T9) t3; static (T8, T9) t4; static (T8 a, T9 b) t5 = t4; } class Nested { class NestedA { } class NestedB { public class NestedC { } } Nested.NestedA x1; Nested.NestedA x2; Nested.NestedB x3; Nested.NestedB x4; Nested.NestedB.NestedC x5; Nested.NestedB.NestedC x6; } interface I2 { } struct S3 : I2 { } ref struct RS : I2 { } class C7 : I2 { } class NormalConstraint where T : I2 { } class NegativeConstraint where T : I2, allows ref struct { }