13.12.1 Language-Defined Restrictions
Static Semantics
{
AI95-00257-01}
The following
restriction_identifiers
are language-defined (additional restrictions are defined in the Specialized
Needs Annexes):
{
AI95-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.
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.
{
AI95-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.
{
AI95-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.
Reason: A
user could compile a rename like
with Ada.Text_IO;
package Text_IO renames Ada.Text_IO;
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.
Specifies a library unit on which there are no semantic dependences.
Legality Rules
Ramification: This
name
is not resolved.
Post-Compilation Rules
{
AI95-00381-01}
No compilation unit included in the partition shall depend semantically
on the library unit identified by the
name.
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.
Extensions to Ada 95
{
AI95-00257-01}
{
AI95-00368-01}
{
extensions to Ada 95}
Restrictions No_Implementation_Attributes,
No_Implementation_Pragmas, and No_Obsolescent_Features are new.