The following will result in "class test.C1 interface function I1.Foo isn't implemented" class C1 : I1 {} public interface I1 { void Foo(); } , but class C(T) : I!(T) {} public interface I(T) { T Foo(); } will give compile error only if a declaration of the class is present somewhere. Is this normal?