да и так:
X++:
anytype any;
;
any = i ? 2 : "d";
не хочет, и с наследниками классов путается. Работает, если только в условии а-ля
класс_а : класс_б
один из них наследует другой. В случае же, когда они наследуются от класс_с - будет ошибка типов. Если следующим в условии будет класс_с и он будет унаследован от класс_б, ругаться не будет.