type TBase = class end; TErr = class(TBase) public static function operator implicit(o: T): TErr; begin raise new System.InvalidOperationException; end; end; procedure p0(o: TErr) := exit; // обязательно вызывать p0 с шаблонным параметром p1 // если вызывать p0& - выводит правильное сообщение об ошибке procedure p1(q: TBase) := p0&(q); // это не должно компилироваться begin var q: TBase; p1&(q); end.