Руководство по Ada (Ada 2022)
10.1.6 Правила видимости на уровне окружения
Обычные правила видимости не применяются внутри имени_родительского_блока или определения_контекста, а также внутри псевдодирективы, появляющейся на месте единицы компиляции. Специальные правила видимости для этих контекстов приведены здесь.
Статическая семантика
Внутри имени_родительского_блока в начале явного элемента_библиотеки и внутри неограниченного_with-описания видимы только те объявления, которые являются явными элементами_библиотеки окружения, и только те объявления являются непосредственно видимыми, которые являются явными корневыми элементами_библиотеки окружения. Внутри ограниченного_with-описания видимы только те объявления, которые являются неявным объявлением ограниченного представления библиотечного пакета окружения, и только те объявления являются непосредственно видимыми, которые являются неявным объявлением ограниченного представления корневого библиотечного пакета.
Внутри описания_использования или псевдодирективы, которые находятся внутри определения_контекста, каждый элемент_библиотеки, упомянутый в предыдущем with-описании того же определения_контекста, является видимым, и каждый корневой элемент_библиотеки, так упомянутый, является непосредственно видимым. Кроме того, внутри такого описания_использования, если данное объявление видимое или непосредственно видимое, каждое объявление, которое непосредственно находится внутри видимой части данного объявления, также является видимым. Другие объявления не являются видимыми или непосредственно видимыми.
Внутри имени_родительского_блока подблока, элементы_библиотеки видимы так же, как и в имени_родительского_блока элемента_библиотеки; кроме того, объявление, соответствующее каждой заглушке_тела в окружении, также является видимым.
Внутри псевдодирективы, которая появляется на месте единицы компиляции, непосредственно предшествующий элемент_библиотеки и каждый из его предков является видимым. Корневой предок элемента_библиотеки является непосредственно видимым.
Несмотря на правила 4.1.3, расширенное имя в with-описании, псевдодиректива в определении_контекста или псевдодиректива, которая появляется на месте единицы компиляции, может состоять из префикса, обозначающего обобщенный пакет, и имени_селектора, обозначающего потомка этого обобщенного пакета. (Потомок обязательно является обобщенной единицей; см. 10.1.1.)