Закомментированный код правильный.
Widget::resize();
Ваш заменяющий код неверен.
Widget* th = static_cast<Widget*>(this);
th->resize();
Подумайте об этом: вы вызываете виртуальную функцию через указатель на базовый класс . Что произойдет, если вы сделаете это с любой виртуальной функцией? Называется самая производная версия. Другими словами, бесконечная рекурсия.