pascalabcnet/TestSuite/recursive_where_gen.pas
2022-10-06 06:45:04 +03:00

30 lines
709 B
ObjectPascal

type
i0 = interface end;
base_i<TSelf> = interface
where TSelf: base_i<TSelf>;
function fi(a: TSelf): TSelf;
end;
base_c<TSelf> = abstract class
where TSelf: base_c<TSelf>;
function fc(a: TSelf): TSelf; abstract;
end;
class1<T> = class(i0, base_i<class1<T>>)
public function fi(a: class1<T>) := a;
end;
class2<T> = class(base_c<class2<T>>, base_i<class2<T>>)
public function fi(a: class2<T>) := self;
public function fc(a: class2<T>): class2<T>; override := self;
end;
record1<T> = record(i0, base_i<record1<T>>)
public function fi(a: record1<T>) := self;
end;
interface1<T> = interface(i0, base_i<interface1<T>>)
end;
begin end.