Я не уверен, является ли это ошибкой компилятора ( Обновление: Саймон Райт подтвердил это как ошибку) или предназначено, но ваши варианты обхода включают:
Использование «использовать Type_Package» для всего пакета - возможно, самый простой, но самый сложный
Использовать некоторые пункты процедуры / переименования функций - это требует больше работы, но не делает весь видимый пакет. EX:
procedure Hello is
package Type_Package is
type T is null record;
procedure Action(X: T) is null;
end Type_Package;
use all type Type_Package.T;
X: Type_Package.T;
procedure Action(X : Type_Package.T) renames Type_Package.Action;
begin
Action(X);
end Hello;
для пакетов generi c, объявите их на уровне библиотеки - это не поможет с вложенными пакетами, но будет полезно для generi c. Вы можете сделать это для одного универсального пакета c, выполнив следующее:
Type_Package.ads
with Use_All_Type;
package Type_Package is new Use_All_Type;
Use_All_Type.ads
generic
package Use_All_Type is
type T is null record;
procedure Action(X: T) is null;
end Use_All_Type;
или для нескольких универсальных c пакетов:
Type_Package.ads
with Use_All_Type;
package Type_Package is
package UAT is new Use_All_Type;
subtype T is UAT.T;
use all type UAT.T;
-- repeat for other generics
end Type_Package;
Use_All_Type.ads
generic
package Use_All_Type is
type T is null record;
procedure Action(X: T) is null;
end Use_All_Type;
Оба эти метода будут работать со следующими основными:
with Type_Package;
procedure Main is
use all type Type_Package.T;
X: Type_Package.T;
begin
Action(X);
end Main;
Примечание: вы можете рассмотреть возможность отправки A daCore сообщение об ошибке, если здесь никто не дает однозначного ответа на вопрос, предназначено это или нет.