using System.Collections.Generic; public class Blah<T> { public class WrapperWrapper<N> { public readonly Wrapper<N> Wrapper; public WrapperWrapper () : this (Wrapper<N>.Empty) { } protected WrapperWrapper (Wrapper<N> val) { Wrapper = val; } public WrapperWrapper<N> NewWrapperWrapper (Wrapper<N> val) { return new WrapperWrapper<N> (val); } } } public class Wrapper<U> { public static Wrapper<U> Empty = new Wrapper<U> (default (U)); private Wrapper (U u) { } } public class C { public static int Main () { var r = new Blah<ulong>.WrapperWrapper<byte>().NewWrapperWrapper (Wrapper<byte>.Empty); if (r == null) return 1; return 0; } }