1/2
{00257AI95−00257−01} The following restriction_identifiers are language−defined (additional restrictions are defined in the Specialized Needs Annexes):
2/2
{00257AI95−00257−01} {Restrictions (No_Implementation_Attributes)} No_Implementation_Attributes
There are no implementation−defined attributes. This restriction applies only to the current compilation or environment, not the entire partition.
2.a/2
Discussion: This restriction (as well as No_Implementation_Pragmas) only applies to the current compilation, because it is likely that the runtime (and possibly user−written low−level code) will need to use implementation−defined entities. But a partition−wide restriction applies everywhere, including the runtime.
3/2
{00257AI95−00257−01} {Restrictions (No_Implementation_Pragmas)} No_Implementation_Pragmas
There are no implementation−defined pragmas or pragma arguments. This restriction applies only to the current compilation or environment, not the entire partition.
4/2
{00368AI95−00368−01} {Restrictions (No_Obsolescent_Features)} No_Obsolescent_Features
There is no use of language features defined in Annex J. It is implementation−defined if uses of the renamings of J.1 are detected by this restriction. This restriction applies only to the current compilation or environment, not the entire partition.
4.a/2
Reason: A user could compile a rename like
4.b/2
with Ada.Text_IO; package Text_IO renames Ada.Text_IO;
4.c/2
Such a rename must not be disallowed by this restriction, nor should the compilation of such a rename be restricted by an implementation. Many implementations implement the renames of J.1 by compiling them normally; we do not want to require implementations to use a special mechanism to implement these renames.
5/2
{00381AI95−00381−01} The following restriction_parameter_identifier is language defined:
6/2
{00381AI95−00381−01} {Restrictions (No_Dependence)} No_Dependence
Specifies a library unit on which there are no semantic dependences.
7/2
{00381AI95−00381−01} The restriction_parameter_argument of a No_Dependence restriction shall be a name; the name shall have the form of a full expanded name of a library unit, but need not denote a unit present in the environment.
7.a/2
Ramification: This name is not resolved.
8/2
{00381AI95−00381−01} No compilation unit included in the partition shall depend semantically on the library unit identified by the name.
8.a/2
Ramification: There is no requirement that the library unit actually exist. One possible use of the pragma is to prevent the use of implementation−defined units; when the program is ported to a different compiler, it is perfectly reasonable that no unit with the name exist.
8.b/2
{00257AI95−00257−01} {00368AI95−00368−01} {extensions to Ada 95} Restrictions No_Implementation_Attributes, No_Implementation_Pragmas, and No_Obsolescent_Features are new.
8.c/2
{00381AI95−00381−01} Restriction No_Dependence is new.