abstract class A<T> { public abstract T getT (); public class B : A<B> { public override A<T>.B getT () { return this; } } } class C { public static int Main () { var r = new A<short>.B (); if (r.getT () != r) return 1; return 0; } }