pascalabcnet/TestSuite/implicitexplicit13.pas
Ivan Bondarev 92c198c0a4 #2155
#2114
2021-01-08 19:56:42 +01:00

30 lines
833 B
ObjectPascal

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