// Пример иллюстрирует использование знака "&" для явного указания шаблонного типа подпрограммы function GetDefault: T := default(T); type GenericType = class constructor := exit; static procedure p1 := writeln(typeof(T)); end; begin // var o := GetDefault; //Ошибка: Встречено ';', а ожидалось выражение // компилятор не отличает знак сравнения < от открытия угловой скобки // и поэтому видит эту строчку как "(GetDefault < byte) > ;" // ";" там оказывается неожиданно, потому что компилятор ожидал ещё какое то выражение для сравнения // но, знаком "&" можно экранировать "<" // то есть переключить значение "<" со знака сравнения на открывающуюся скобочку: var o := GetDefault&; // в случае с шаблонными типами - обычно "&" не нужен var a := new GenericType; // однако для вызова статичного метода - его так же надо поставить GenericType&.p1; end.