type ConceptAttribute = class(System.Attribute) end; IsConceptParameterAttribute = class(System.Attribute) end; ExplicitModelAttribute = class(System.Attribute) end; [Concept] SumTC = abstract class public function sum(v1, v2: T): T; abstract; end; SumTC_Integer = class(SumTC) public function sum(v1, v2: Integer): Integer; override; begin Result := v1 + v2; end; end; function Sum3(v1, v2, v3: T): T; where SumTCT: SumTC, constructor; begin var s := __ConceptSingleton&.&Instance; Result := s.sum(v1, s.sum(v2, v3)); end; begin write(Sum3&(1, 2, 3)); end.