namespace Bug345 { interface I1 { Foo (x : int) : void; } interface I2[T] { Foo (x : T) : void; } interface I3 { Foo[T] (x : T) : void; } class C1 : I1 { // E: unimplemented public Foo[T] (_ : T) : void { } } class C2 : I2[int] { // E: unimplemented public Foo[T] (_ : T) : void { } } class C3 : I3 { // OK public Foo[T] (_ : T) : void { } } class C4 : I1 { // OK public Foo (_ : int) : void { } } class C5 : I2[int] { // OK public Foo (_ : int) : void { } } class C6 : I2[string] { // E: unimplemented public Foo (_ : int) : void { } } class C7[T] : I3 { // E: unimplemented public Foo (_ : T) : void { } } class C8[T] : I2[int] { // E: unimplemented public Foo (_ : T) : void { } } }