class Widget
{
    this(Widget source)
    {

    }

    Widget duplicate()
    {
        return new Widget(this); // Вы­де­ля­ет па­мять и вы­зы­ва­ет this(Widget)
    }
}

class TextWidget : Widget
{
    this(TextWidget source)
    {
        super(source);
    }

    override TextWidget duplicate()
    {
        return new TextWidget(this);
    }
}

void main()
{
    TextWidget tw;
    TextWidget clone = tw.duplicate();
}
