xxxxxxxxxx
abstract class A(T = string)
{}
abstract class B(T = string) : A!T
{
:
final B!T s()
{ return _s; }
C!T b0()
{ if (b1()) {} return null; }
bool b1() nothrow pure
{ return _s !is null ? cast(C!T)_s !is null : false; }
final void b2()
{ if (b1()) {} }
C!T bx()
{ return _x; }
C!T _x;
B!T _s;
}
class C(T = string): B!T
{
:
final override C!T b0()
{ return this; }
final void c0()
{}
final override bool b1() nothrow pure
{ return count > 0; }
size_t count;
}
void main()
{
auto c = new C!string();
//import std.stdio;
//writeln(c);
}