Справочник по Ada 95
12.4 Формальные объекты
Формальный объект в обобщенном контексте может использоваться для передачи значения или переменной в обобщенную единицу.
Синтаксис
formal_object_declaration ::=
defining_identifier_list : mode subtype_mark [:= default_expression];
defining_identifier_list : mode subtype_mark [:= default_expression];
Правила разрешения имен
Ожидаемый тип для default_expression, если таковой имеется, — это тип формального объекта.
Для формального объекта в обобщенном контексте с режимом in ожидаемый тип фактического параметра — это тип формального объекта.
Для формального объекта в обобщенном контексте с режимом in out тип фактического параметра должен соответствовать типу формального объекта.
Правила допустимости
Если формальный объект в обобщенном контексте имеет default_expression, то режим должен быть in (явный или по умолчанию); в противном случае режим должен быть in или in out.
Для формального объекта в обобщенном контексте с режимом in фактический параметр должен быть выражением. Для формального объекта с режимом in out фактический параметр должен быть именем переменной, для которой разрешено переименование (см. 8.5.1).
Тип формального объекта в обобщенном контексте с режимом in должен быть не ограниченным.
Статическая семантика
formal_object_declaration объявляет формальный объект в обобщенном контексте. Режим по умолчанию — in. Для формального объекта с режимом in номинальный подтип — тот, который обозначается subtype_mark в объявлении формального объекта. Для формального объекта с режимом in out его тип определяется subtype_mark в объявлении; его номинальный подтип является нестатическим, даже если subtype_mark обозначает статический подтип.
В экземпляре объявление formal_object_declaration с режимом in объявляет новый самостоятельный константный объект, инициализируемый фактическим параметром, а объявление с режимом in out объявляет представление, свойства которого идентичны свойствам фактического параметра.
Динамическая семантика
При вычислении generic_association для формального объекта с режимом in создается константный объект, значение фактического параметра преобразуется к номинальному подтипу формального объекта и присваивается объекту, включая любые корректировки значений — см. 7.6.
ПРИМЕЧАНИЯ
6 Ограничения, применяемые к формальному объекту в обобщенном контексте с режимом in out, — это ограничения соответствующего фактического параметра в обобщенном контексте (а не те, что подразумеваются subtype_mark, который появляется в formal_object_declaration). Поэтому для избежания путаницы рекомендуется использовать имя первого подтипа для объявления такого формального объекта.