Recursion is acceptable in methods, where you can break out of it. But with class types, you end up with code that will compile but not run if you
try to instantiate the class.
Noncompliant Code Example
class C2<T> : C1<C2<C2<T>>> // Noncompliant
var c2 = new C2<int>();