Руководство по Ada (Ada 2022)
7.3.3 Значения по умолчанию для начальных условий
Для частного типа или частного расширения (включая формальный тип параметра обобщения) можно указать следующее определённое языком ограничение аспекта с помощью определения аспекта (см. 13.1.1):
Default_Initial_Condition
Этот аспект должен быть задан выражением, называемым выражением начального условия по умолчанию. Default_Initial_Condition может быть указан для объявления частного типа, объявления частного расширения, определения формального частного типа или определения формального производного типа. Аспект Default_Initial_Condition не наследуется, но его эффекты являются аддитивными, как определено ниже.
Правила разрешения имен
Ожидаемый тип для выражения начального условия по умолчанию — любой булевский тип.
Внутри выражения начального условия по умолчанию, связанного с объявлением типа T, имя, обозначающее объявление, интерпретируется как текущий экземпляр условного (не абстрактного) формального производного типа NT с предком T, имеющего непосредственно видимые примитивные операции.
Правила легальности
Аспект Default_Initial_Condition не должен быть указан для типа, частичный вид которого имеет неизвестные дискриминанты, независимо от того, объявлены ли они явно или унаследованы.
Статическая семантика
Если аспект Default_Initial_Condition указан для типа T, то выражение начального условия по умолчанию применяется к T и ко всем потомкам T.
Динамическая семантика
Если одно или несколько выражений начального условия по умолчанию применяются к (не абстрактному) типу T, то проверка начального условия по умолчанию выполняется после успешной инициализации объекта типа T по умолчанию (см. 3.3.1). В случае контролируемого типа проверка выполняется после вызова процедуры инициализации типа (см. 7.6).
Если выполнение проверок требуется политикой утверждения Default_Initial_Condition (см. 11.4.2), действующей в момент соответствующего определения аспекта, применимого к данному типу, то соответствующее выражение начального условия по умолчанию считается активным.
Проверка начального условия по умолчанию состоит из оценки каждого активного выражения начального условия по умолчанию, применимого к T. Любые операции в таком выражении, которые были определены как примитивные операции (условного) формального производного типа NT, в ходе оценки выражения определяются как для формального производного типа в экземпляре, где T — фактический тип для NT (см. 12.5.1). Эти оценки, если их более одной, выполняются в произвольном порядке. Если хотя бы одна из них оценивается как False, Assertions.Assertion_Error поднимается в момент инициализации объекта.
Для формального параметра типа T проверка начального условия по умолчанию выполняется, как определено фактическим типом, вместе с любым начальным условием по умолчанию самого формального типа.
Разрешения реализации
Реализации могут расширять синтаксис или семантику аспекта Default_Initial_Condition определённым реализацией способом.
ПРИМЕЧАНИЕ. Пример использования этого аспекта см. в определении контейнера Vector в A.18.2.