var i: integer; type TBase = class end; TErr = class(TBase) public static function operator implicit(o: T): TErr; begin i := 1; end; end; t1 = class(TErr) end; // обязательно шаблонная подпрограмма и использование T ниже. Иначе не воспроизводится procedure p1; begin var a: TBase := new t1; var b := TErr&( a ); // тут вместо приведения типа вызывает operator implicit, который тут ну никак не подходит // если удалить operator implicit - на этой строчке оказывается обычное приведение типа, как и должно i := 2; end; begin p1&; assert(i = 2); end.