Смена базового класса (класса-родителя) на этапе компиляции

Узнал, что, оказывается, можно менять базовый класс в зависимости от настроек проекта.
Вот простейший пример, как это сделать с помощью флагов компиляции:

[gist:6050096]