K.2 Language-Defined Attributes
This subclause summarizes the 
definitions given elsewhere of the language-defined attributes. Attributes 
are properties of entities that can be queried by an Ada program.
P'Access
For a 
prefix 
P that denotes a subprogram:
P'Access yields an access value that designates 
the subprogram denoted by P. The type of P'Access is an access-to-subprogram 
type (
S), as determined by the expected type. See 
3.10.2.
X'Access
For a 
prefix 
X that denotes an aliased view of an object:
X'Access yields an access value that designates 
the object denoted by X. The type of X'Access is an access-to-object 
type, as determined by the expected type. The expected type shall be 
a general access type. See 
3.10.2.
X'Address
For a 
prefix 
X that denotes an object, program unit, or label:
Denotes the address of the first of the 
storage elements allocated to X. For a program unit or label, this value 
refers to the machine code associated with the corresponding body or 
statement. 
The value of this attribute is of type System.Address. See 
13.3.
S'Adjacent
For every subtype S of a floating point type T:
S'Adjacent 
denotes a function with the following specification: 
function S'Adjacent (X, Towards : T)
  return T
If 
Towards 
= 
X, the function yields 
X; 
otherwise, it yields the machine number of the type 
T 
adjacent to 
X in the direction of 
Towards, 
if that machine number exists. 
If 
the result would be outside the base range of S, Constraint_Error is 
raised. When 
T'Signed_Zeros is True, 
a zero result has the sign of 
X. When 
Towards is zero, its sign has no bearing 
on the result. See 
A.5.3.
S'Aft
For every fixed point subtype S:
S'Aft yields the number of decimal digits 
needed after the decimal point to accommodate the 
delta of the 
subtype S, unless the 
delta of the subtype S is greater than 0.1, 
in which case the attribute yields the value one. (S'Aft is the smallest 
positive integer N for which (10**N)*S'Delta is greater than or equal 
to one.) The value of this attribute is of the type 
universal_integer. 
See 
3.5.10.
  S'Alignment
For every subtype S:
The value of this attribute is of type 
universal_integer, and nonnegative.
For an object X of subtype S, if S'Alignment 
is not zero, then X'Alignment is a nonzero integral multiple of S'Alignment 
unless specified otherwise by a representation item. See 
13.3.
X'Alignment
For a 
prefix 
X that denotes an object:
The value of this attribute is of type 
universal_integer, and nonnegative; zero means that the object 
is not necessarily aligned on a storage element boundary. If X'Alignment 
is not zero, then X is aligned on a storage unit boundary and X'Address 
is an integral multiple of X'Alignment (that is, the Address modulo the 
Alignment is zero).
This paragraph was deleted. 
See 
13.3.
 
S'Base
For every scalar subtype S:
S'Base denotes an unconstrained subtype 
of the type of S. This unconstrained subtype is called the 
base subtype 
of the type. See 
3.5.
S'Bit_Order
For every specific record subtype S:
Denotes the bit ordering for the type of 
S. The value of this attribute is of type System.Bit_Order. See 
13.5.3.
P'Body_Version
For a 
prefix 
P that statically denotes a program unit:
Yields a value of the predefined type String 
that identifies the version of the compilation unit that contains the 
body (but not any subunits) of the program unit. See 
E.3.
T'Callable
For a 
prefix 
T that is of a task type (after any implicit dereference):
Yields the value True when the task denoted 
by T is 
callable, and False otherwise; See 
9.9.
E'Caller
For a 
prefix 
E that denotes an 
entry_declaration:
Yields a value of the type Task_Id that 
identifies the task whose call is now being serviced. Use of this attribute 
is allowed only inside an 
accept_statement, 
or 
entry_body 
after the 
entry_barrier, 
corresponding to the 
entry_declaration 
denoted by E. See 
C.7.1.
S'Ceiling
For every subtype S of a floating point type T:
S'Ceiling 
denotes a function with the following specification: 
function S'Ceiling (X : T)
  return T
The function yields the value 
Ceiling(
X), 
that is, the smallest (most negative) integral value greater than or 
equal to 
X. When 
X 
is zero, the result has the sign of 
X; 
a zero result otherwise has a negative sign when S'Signed_Zeros is True. 
See 
A.5.3.
S'Class
For every subtype S of a tagged type T (specific or class-wide):
S'Class denotes a subtype of the class-wide 
type (called T'Class in this document) for the class rooted at 
T (or if S already denotes a class-wide subtype, then S'Class 
is the same as S).
S'Class 
is unconstrained. However, if S is constrained, then the values of S'Class 
are only those that when converted to the type 
T belong to S. 
See 
3.9.
S'Class
For every subtype S of an untagged private type whose full view is tagged:
Denotes the class-wide subtype corresponding 
to the full view of S. This attribute is allowed only from the beginning 
of the private part in which the full view is declared, until the declaration 
of the full view. After the full view, the Class attribute of the full 
view can be used. See 
7.3.1.
X'Component_Size
For a 
prefix 
X that denotes an array subtype or array object (after any implicit dereference):
Denotes the size in bits of components 
of the type of X. The value of this attribute is of type 
universal_integer. 
See 
13.3.
S'Compose
For every subtype S of a floating point type T:
S'Compose 
denotes a function with the following specification: 
function S'Compose (Fraction : T;
                    Exponent : universal_integer)
  return T
Let 
v 
be the value 
Fraction · 
T'Machine_RadixExponent–k, 
where 
k is the normalized exponent 
of 
Fraction. If 
v 
is a machine number of the type 
T, 
or if |
v| ≥ 
T'Model_Small, 
the function yields 
v; otherwise, it 
yields either one of the machine numbers of the type 
T 
adjacent to 
v. 
Constraint_Error 
is optionally raised if 
v is outside 
the base range of S. A zero result has the sign of 
Fraction 
when S'Signed_Zeros is True. See 
A.5.3.
A'Constrained
For a 
prefix 
A that is of a discriminated type (after any implicit dereference):
Yields the value True if A denotes a constant, 
a value, a tagged object, or a constrained variable, and False otherwise. 
The value of this attribute is of the predefined type Boolean. See 
3.7.2.
S'Copy_Sign
For every subtype S of a floating point type T:
S'Copy_Sign 
denotes a function with the following specification: 
function S'Copy_Sign (Value, Sign : T)
  return T
If the value of 
Value 
is nonzero, the function yields a result whose magnitude is that of 
Value 
and whose sign is that of 
Sign; otherwise, 
it yields the value zero. 
Constraint_Error 
is optionally raised if the result is outside the base range of S. A 
zero result has the sign of 
Sign when 
S'Signed_Zeros is True. See 
A.5.3.
E'Count
For a 
prefix 
E that denotes an entry of a task or protected unit:
Yields the number of calls presently queued 
on the entry E of the current instance of the unit. The value of this 
attribute is of the type 
universal_integer. See 
9.9.
S'Definite
For a 
prefix 
S that denotes a formal indefinite subtype:
S'Definite yields True if the actual subtype 
corresponding to S is definite; otherwise, it yields False. The value 
of this attribute is of the predefined type Boolean. See 
12.5.1.
S'Delta
For every fixed point subtype S:
S'Delta denotes the 
delta of the 
fixed point subtype S. The value of this attribute is of the type 
universal_real. 
See 
3.5.10.
S'Denorm
For every subtype S of a floating point type T:
Yields the value True if every value expressible 
in the form
    ± 
mantissa 
· 
T'Machine_RadixT'Machine_Emin
where 
mantissa is a nonzero 
T'Machine_Mantissa-digit 
fraction in the number base 
T'Machine_Radix, 
the first digit of which is zero, is a machine number (see 
3.5.7) 
of the type 
T; yields the value False 
otherwise. The value of this attribute is of the predefined type Boolean. 
See 
A.5.3.
S'Digits
For every floating point subtype S:
S'Digits denotes the requested decimal 
precision for the subtype S. The value of this attribute is of the type 
universal_integer. See 
3.5.8.
S'Digits
For every decimal fixed point subtype S:
S'Digits denotes the 
digits of the 
decimal fixed point subtype S, which corresponds to the number of decimal 
digits that are representable in objects of the subtype. The value of 
this attribute is of the type 
universal_integer. See 
3.5.10.
  S'Enum_Rep
For every discrete subtype S:
S'Enum_Rep 
denotes a function with the following specification: 
function S'Enum_Rep (Arg : S'Base) return universal_integer
This function returns the representation 
value of the value of Arg, as a value of type 
universal_integer. 
The 
representation value is
 
the internal code specified in an enumeration representation clause, 
if any, for the type corresponding to the value of Arg, and otherwise 
is the position number of the value. See 
13.4.
  S'Enum_Val
For every discrete subtype S:
S'Enum_Val 
denotes a function with the following specification: 
function S'Enum_Val (Arg : universal_integer) return S'Base
This function returns a value of the type 
of S whose representation value equals the value of Arg. For the evaluation 
of a call on S'Enum_Val, if there is no value in the base range of its 
type with the given representation value, Constraint_Error is raised. 
See 
13.4.
S'Exponent
For every subtype S of a floating point type T:
S'Exponent 
denotes a function with the following specification: 
function S'Exponent (X : T)
  return universal_integer
The function yields the normalized exponent 
of 
X. See 
A.5.3.
S'External_Tag
For every subtype S of a tagged type T (specific or class-wide):
S'External_Tag 
denotes an external string representation for S'Tag; it is of the predefined 
type String. External_Tag may be specified for a specific tagged type 
via an 
attribute_definition_clause; 
the expression of such a clause shall be static.
 
The default external tag representation is implementation defined. See 
13.13.2. See 
13.3.
A'First
For a 
prefix 
A that is of an array type (after any implicit dereference), or denotes 
a constrained array subtype:
A'First denotes the lower bound of the 
first index range; its type is the corresponding index type. See 
3.6.2.
S'First
For every scalar subtype S:
S'First denotes the lower bound of the 
range of S. The value of this attribute is of the type of S. See 
3.5.
A'First(N)
For a 
prefix 
A that is of an array type (after any implicit dereference), or denotes 
a constrained array subtype:
A'First(N) denotes the lower bound of the 
N-th index range; its type is the corresponding index type. See 
3.6.2.
R.C'First_Bit
For a component C of a composite, non-array object R:
If the nondefault bit ordering applies 
to the composite type, and if a 
component_clause 
specifies the placement of C, denotes the value given for the 
first_bit 
of the 
component_clause; 
otherwise, denotes the offset, from the start of the first of the storage 
elements occupied by C, of the first bit occupied by C. This offset is 
measured in bits. The first bit of a storage element is numbered zero. 
The value of this attribute is of the type 
universal_integer. 
See 
13.5.2.
  S'First_Valid
For every static discrete subtype S for which there exists at least one 
value belonging to S that satisfies the predicates of S:
S'First_Valid denotes the smallest value 
that belongs to S and satisfies the predicates of S. The value of this 
attribute is of the type of S. See 
3.5.5.
S'Floor
For every subtype S of a floating point type T:
S'Floor denotes 
a function with the following specification: 
function S'Floor (X : T)
  return T
The function yields the value 
Floor(
X), 
that is, the largest (most positive) integral value less than or equal 
to 
X. When 
X 
is zero, the result has the sign of 
X; 
a zero result otherwise has a positive sign. See 
A.5.3.
S'Fore
For every fixed point subtype S:
S'Fore yields the minimum number of characters 
needed before the decimal point for the decimal representation of any 
value of the subtype S, assuming that the representation does not include 
an exponent, but includes a one-character prefix that is either a minus 
sign or a space. (This minimum number does not include superfluous zeros 
or underlines, and is at least 2.) The value of this attribute is of 
the type 
universal_integer. See 
3.5.10.
S'Fraction
For every subtype S of a floating point type T:
S'Fraction 
denotes a function with the following specification: 
function S'Fraction (X : T)
  return T
The function yields the value 
X 
· 
T'Machine_Radix–k, 
where 
k is the normalized exponent 
of 
X. A zero result, which can only 
occur when 
X is zero, has the sign 
of 
X. See 
A.5.3.
  X'Has_Same_Storage
For a 
prefix 
X that denotes an object:
X'Has_Same_Storage denotes a function with 
the following specification:
function X'Has_Same_Storage (Arg : any_type)
  return Boolean
The actual parameter shall be a name that 
denotes an object. The object denoted by the actual parameter can be 
of any type. This function evaluates the names of the objects involved. 
It returns True if the representation of the object denoted by the actual 
parameter occupies exactly the same bits as the representation of the 
object denoted by X and the objects occupy at least one bit; otherwise, 
it returns False. See 
13.3.
E'Identity
For a 
prefix 
E that denotes an exception:
E'Identity returns the unique identity 
of the exception. The type of this attribute is Exception_Id. See 
11.4.1.
T'Identity
For a 
prefix 
T that is of a task type (after any implicit dereference):
Yields a value of the type Task_Id that 
identifies the task denoted by T. See 
C.7.1.
S'Image
For every subtype S of a type T:
S'Image denotes 
a function with the following specification: 
function S'Image(Arg : S'Base)
  return String
S'Image calls S'Put_Image passing 
Arg 
(which will typically store a sequence of character values in a text 
buffer) and then returns the result of retrieving the contents of that 
buffer with function Get. See 
4.10.
  X'Image
For a 
prefix 
X of a type T other than 
universal_real or 
universal_fixed:
X'Image denotes the result of calling function 
S'Image with 
Arg being X, where S is the nominal subtype of X. 
See 
4.10.
  E'Index
For a 
prefix 
E that denotes an entry declaration of an entry family:
Within a precondition or postcondition 
expression for entry family E, denotes the value of the entry index for 
the call of E. The nominal subtype of this attribute is the entry index 
subtype. See 
6.1.1.
S'Class'Input
For every subtype S'Class of a class-wide type T'Class:
S'Class'Input 
denotes a function with the following specification: 
function S'Class'Input(
   Stream : not null access Ada.Streams.Root_Stream_Type'Class)
   return T'Class
First reads the external tag from 
Stream 
and determines the corresponding internal tag (by calling Tags.Descendant_Tag(String'Input(
Stream), 
S'Tag) which can raise Tag_Error — see 
3.9) 
and then dispatches to the subprogram denoted by the Input attribute 
of the specific type identified by the internal tag; returns that result. 
If the specific type identified by the internal tag is abstract, Constraint_Error 
is raised. See 
13.13.2.
S'Input
For every subtype S of a specific type T:
S'Input denotes 
a function with the following specification: 
function S'Input(
   Stream : not null access Ada.Streams.Root_Stream_Type'Class)
   return T
S'Input reads and returns one value from 
Stream, using any bounds or discriminants written by a corresponding 
S'Output to determine how much to read. See 
13.13.2.
 A'Last
For a 
prefix 
A that is of an array type (after any implicit dereference), or denotes 
a constrained array subtype:
A'Last denotes the upper bound of the first 
index range; its type is the corresponding index type. See 
3.6.2.
S'Last
For every scalar subtype S:
S'Last denotes the upper bound of the range 
of S. The value of this attribute is of the type of S. See 
3.5.
 A'Last(N)
For a 
prefix 
A that is of an array type (after any implicit dereference), or denotes 
a constrained array subtype:
A'Last(N) denotes the upper bound of the 
N-th index range; its type is the corresponding index type. See 
3.6.2.
R.C'Last_Bit
For a component C of a composite, non-array object R:
If the nondefault bit ordering applies 
to the composite type, and if a 
component_clause 
specifies the placement of C, denotes the value given for the 
last_bit 
of the 
component_clause; 
otherwise, denotes the offset, from the start of the first of the storage 
elements occupied by C, of the last bit occupied by C. This offset is 
measured in bits. The value of this attribute is of the type 
universal_integer. 
See 
13.5.2.
   S'Last_Valid
For every static discrete subtype S for which there exists at least one 
value belonging to S that satisfies the predicates of S:
S'Last_Valid denotes the largest value 
that belongs to S and satisfies the predicates of S. The value of this 
attribute is of the type of S. See 
3.5.5.
S'Leading_Part
For every subtype S of a floating point type T:
S'Leading_Part 
denotes a function with the following specification: 
function S'Leading_Part (X : T;
                         Radix_Digits : universal_integer)
  return T
Let v 
be the value T'Machine_Radixk–Radix_Digits, 
where k is the normalized exponent 
of X. The function yields the value 
Floor(X/v) 
· v, when X 
is nonnegative and Radix_Digits is 
positive;
Ceiling(X/v) 
· v, when X 
is negative and Radix_Digits is positive. 
Constraint_Error 
is raised when 
Radix_Digits is zero 
or negative. A zero result, which can only occur when 
X 
is zero, has the sign of 
X. See 
A.5.3.
 A'Length
For a 
prefix 
A that is of an array type (after any implicit dereference), or denotes 
a constrained array subtype:
A'Length denotes the number of values of 
the first index range (zero for a null range); its type is 
universal_integer. 
See 
3.6.2.
 A'Length(N)
For a 
prefix 
A that is of an array type (after any implicit dereference), or denotes 
a constrained array subtype:
A'Length(N) denotes the number of values 
of the N-th index range (zero for a null range); its type is 
universal_integer. 
See 
3.6.2.
S'Machine
For every subtype S of a floating point type T:
S'Machine 
denotes a function with the following specification: 
function S'Machine (X : T)
  return T
If 
X 
is a machine number of the type 
T, 
the function yields 
X; otherwise, it 
yields the value obtained by rounding or truncating 
X 
to either one of the adjacent machine numbers of the type 
T. 
Constraint_Error is raised if 
rounding or truncating 
X to the precision 
of the machine numbers results in a value outside the base range of S. 
A zero result has the sign of 
X when 
S'Signed_Zeros is True. See 
A.5.3.
S'Machine_Emax
For every subtype S of a floating point type T:
Yields the largest (most positive) value 
of 
exponent such that every value expressible in the canonical 
form (for the type 
T), having a 
mantissa 
of 
T'Machine_Mantissa digits, is a 
machine number (see 
3.5.7) of the type 
T. 
This attribute yields a value of the type 
universal_integer. See 
A.5.3.
S'Machine_Emin
For every subtype S of a floating point type T:
Yields the smallest (most negative) value 
of 
exponent such that every value expressible in the canonical 
form (for the type 
T), having a 
mantissa 
of 
T'Machine_Mantissa digits, is a 
machine number (see 
3.5.7) of the type 
T. 
This attribute yields a value of the type 
universal_integer. See 
A.5.3.
S'Machine_Mantissa
For every subtype S of a floating point type T:
Yields the largest value of 
p 
such that every value expressible in the canonical form (for the type 
T), having a 
p-digit 
mantissa and an 
exponent between 
T'Machine_Emin 
and 
T'Machine_Emax, is a machine number 
(see 
3.5.7) of the type 
T. 
This attribute yields a value of the type 
universal_integer. See 
A.5.3.
S'Machine_Overflows
For every subtype S of a floating point type T:
Yields the value True if overflow and divide-by-zero 
are detected and reported by raising Constraint_Error for every predefined 
operation that yields a result of the type 
T; 
yields the value False otherwise. The value of this attribute is of the 
predefined type Boolean. See 
A.5.3.
S'Machine_Overflows
For every subtype S of a fixed point type T:
Yields the value True if overflow and divide-by-zero 
are detected and reported by raising Constraint_Error for every predefined 
operation that yields a result of the type 
T; 
yields the value False otherwise. The value of this attribute is of the 
predefined type Boolean. See 
A.5.4.
S'Machine_Radix
For every subtype S of a floating point type T:
Yields the radix of the hardware representation 
of the type 
T. The value of this attribute 
is of the type 
universal_integer. See 
A.5.3.
S'Machine_Radix
For every subtype S of a fixed point type T:
Yields the radix of the hardware representation 
of the type 
T. The value of this attribute 
is of the type 
universal_integer. See 
A.5.4.
   S'Machine_Rounding
For every subtype S of a floating point type T:
S'Machine_Rounding 
denotes a function with the following specification: 
function S'Machine_Rounding (X : T)
  return T
The function yields the integral value 
nearest to 
X. If 
X 
lies exactly halfway between two integers, one of those integers is returned, 
but which of them is returned is unspecified. A zero result has the sign 
of 
X when S'Signed_Zeros is True. This 
function provides access to the rounding behavior which is most efficient 
on the target processor.
 See 
A.5.3.
S'Machine_Rounds
For every subtype S of a floating point type T:
Yields the value True if rounding is performed 
on inexact results of every predefined operation that yields a result 
of the type 
T; yields the value False 
otherwise. The value of this attribute is of the predefined type Boolean. 
See 
A.5.3.
S'Machine_Rounds
For every subtype S of a fixed point type T:
Yields the value True if rounding is performed 
on inexact results of every predefined operation that yields a result 
of the type 
T; yields the value False 
otherwise. The value of this attribute is of the predefined type Boolean. 
See 
A.5.4.
S'Max
For every scalar subtype S:
S'Max denotes 
a function with the following specification: 
function S'Max(Left, Right : S'Base)
  return S'Base
The function returns the greater of the 
values of the two parameters. See 
3.5.
   S'Max_Alignment_For_Allocation
For every subtype S:
Denotes the maximum value for Alignment 
that can be requested by the implementation via Allocate for an access 
type whose designated subtype is S. The value of this attribute is of 
type 
universal_integer. See 
13.11.1.
S'Max_Size_In_Storage_Elements
For every subtype S:
Denotes the maximum value for Size_In_Storage_Elements 
that can be requested by the implementation via Allocate for an access 
type whose designated subtype is S. The value of this attribute is of 
type 
universal_integer. See 
13.11.1.
S'Min
For every scalar subtype S:
S'Min denotes 
a function with the following specification: 
function S'Min(Left, Right : S'Base)
  return S'Base
The function returns the lesser of the 
values of the two parameters. See 
3.5.
   S'Mod
For every modular subtype S:
S'Mod denotes 
a function with the following specification:
function S'Mod (Arg : universal_integer)
  return S'Base
This function returns 
Arg mod 
S'Modulus, as a value of the type of S. See 
3.5.4.
S'Model
For every subtype S of a floating point type T:
S'Model denotes 
a function with the following specification: 
function S'Model (X : T)
  return T
If the Numerics Annex is not supported, 
the meaning of this attribute is implementation defined; see 
G.2.2 
for the definition that applies to implementations supporting the Numerics 
Annex. See 
A.5.3.
S'Model_Emin
For every subtype S of a floating point type T:
If the Numerics Annex is not supported, 
this attribute yields an implementation defined value that is greater 
than or equal to the value of 
T'Machine_Emin. 
See 
G.2.2 for further requirements that apply 
to implementations supporting the Numerics Annex. The value of this attribute 
is of the type 
universal_integer. See 
A.5.3.
S'Model_Epsilon
For every subtype S of a floating point type T:
Yields the value 
T'Machine_Radix1 
– T'Model_Mantissa. 
The value of this attribute is of the type 
universal_real. See 
A.5.3.
S'Model_Mantissa
For every subtype S of a floating point type T:
If the Numerics Annex is not supported, 
this attribute yields an implementation defined value that is greater 
than or equal to 
Ceiling(
d · 
log(10) / log(
T'
Machine_Radix)) 
+ 1, where 
d is the requested decimal 
precision of 
T, and less than or equal 
to the value of 
T'Machine_Mantissa. 
See 
G.2.2 for further requirements that apply 
to implementations supporting the Numerics Annex. The value of this attribute 
is of the type 
universal_integer. See 
A.5.3.
S'Model_Small
For every subtype S of a floating point type T:
Yields the value 
T'Machine_RadixT'Model_Emin – 1. The value of this attribute is of the 
type 
universal_real. See 
A.5.3.
S'Modulus
For every modular subtype S:
S'Modulus yields the modulus of the type 
of S, as a value of the type 
universal_integer. See 
3.5.4.
   S'Object_Size
For every subtype S:
If S is definite, denotes the size (in 
bits) of a stand-alone aliased object, or a component of subtype S in 
the absence of an 
aspect_specification 
or representation item that specifies the size of the object or component. 
If S is indefinite, the meaning is implementation-defined. The value 
of this attribute is of the type 
universal_integer. See 
13.3.
   X'Old
For a 
prefix 
X that denotes an object of a nonlimited type:
Each X'Old in a postcondition expression 
that is enabled, other than those that occur in subexpressions that are 
determined to be unevaluated, denotes a constant that is implicitly declared 
at the beginning of the subprogram body, entry body, or accept statement. 
See 
6.1.1.
S'Class'Output
For every subtype S'Class of a class-wide type T'Class:
S'Class'Output 
denotes a procedure with the following specification: 
procedure S'Class'Output(
   Stream : not null access Ada.Streams.Root_Stream_Type'Class;
   Item   : in T'Class)
First writes the external tag of 
Item 
to 
Stream (by calling String'Output(
Stream, Tags.External_Tag(
Item'Tag)) 
— see 
3.9) and then dispatches to the 
subprogram denoted by the Output attribute of the specific type identified 
by the tag. Tag_Error is raised if the tag of Item identifies a type 
declared at an accessibility level deeper than that of S. See 
13.13.2.
S'Output
For every subtype S of a specific type T:
S'Output 
denotes a procedure with the following specification: 
procedure S'Output(
   Stream : not null access Ada.Streams.Root_Stream_Type'Class;
   Item : in T)
S'Output writes the value of 
Item 
to 
Stream, including any bounds or discriminants. See 
13.13.2.
   X'Overlaps_Storage
For a 
prefix 
X that denotes an object:
X'Overlaps_Storage denotes a function with 
the following specification:
function X'Overlaps_Storage (Arg : any_type)
  return Boolean
The actual parameter shall be a name that 
denotes an object. The object denoted by the actual parameter can be 
of any type. This function evaluates the names of the objects involved 
and returns True if the representation of the object denoted by the actual 
parameter shares at least one bit with the representation of the object 
denoted by X; otherwise, it returns False. See 
13.3.
   X'Parallel_Reduce(Reducer, Initial_Value)
For a 
prefix 
X of an array type (after any implicit dereference), or that denotes 
an iterable container object (see 
5.5.1):
X'Parallel_Reduce 
is a reduction expression that yields a result equivalent to replacing 
the attribute 
identifier 
with Reduce and the 
prefix 
of the attribute with the 
value_sequence: 
[parallel for Item of X => Item]
 D'Partition_Id
For a 
prefix 
D that denotes a library-level declaration, excepting a declaration of 
or within a declared-pure library unit:
Denotes a value of the type 
universal_integer 
that identifies the partition in which D was elaborated. If D denotes 
the declaration of a remote call interface library unit (see 
E.2.3) 
the given partition is the one where the body of D was elaborated. See 
E.1.
S'Pos
For every discrete subtype S:
S'Pos denotes 
a function with the following specification: 
function S'Pos(Arg : S'Base)
  return universal_integer
This function returns the position number 
of the value of 
Arg, as a value of 
type 
universal_integer. See 
3.5.5.
R.C'Position
For a component C of a composite, non-array object R:
If the nondefault bit ordering applies 
to the composite type, and if a 
component_clause 
specifies the placement of C, denotes the value given for the 
position 
of the 
component_clause; 
otherwise, denotes the same value as R.C'Address – R'Address. The 
value of this attribute is of the type 
universal_integer. See 
13.5.2.
S'Pred
For every scalar subtype S:
S'Pred denotes 
a function with the following specification: 
function S'Pred(Arg : S'Base)
  return S'Base
For an enumeration 
type, the function returns the value whose position number is one less 
than that of the value of 
Arg; 
Constraint_Error 
is raised if there is no such value of the type. For an integer type, 
the function returns the result of subtracting one from the value of 
Arg. For a fixed point type, the function 
returns the result of subtracting 
small from the value of 
Arg. 
For a floating point type, the function returns the machine number (as 
defined in 
3.5.7) immediately below the value 
of 
Arg; 
Constraint_Error 
is raised if there is no such machine number. See 
3.5.
   S'Preelaborable_Initialization
For a nonformal composite subtype S declared within the visible part 
of a package or a generic package, or a generic formal private subtype 
or formal derived subtype:
This attribute is of Boolean type, and 
its value reflects whether the type of S has preelaborable initialization. 
See 
10.2.1.
   P'Priority
For a 
prefix 
P that denotes a protected object:
Denotes a non-aliased component of the 
protected object P. This component is of type System.Any_Priority and 
its value is the priority of P. P'Priority denotes a variable if and 
only if P denotes a variable. A reference to this attribute shall appear 
only within the body of P. See 
D.5.2.
   S'Put_Image
For every subtype S of a type T other than universal_real or universal_fixed:
S'Put_Image 
denotes a procedure with the following specification: 
procedure S'Put_Image
   (Buffer : in out 
             Ada.Strings.Text_Buffers.Root_Buffer_Type'Class;
    Arg   : in T);
The default implementation of S'Put_Image 
writes (using Wide_Wide_Put) an 
image of the value of 
Arg. 
See 
4.10.
 A'Range
For a 
prefix 
A that is of an array type (after any implicit dereference), or denotes 
a constrained array subtype:
A'Range is equivalent to the range A'First 
.. A'Last, except that the 
prefix 
A is only evaluated once. See 
3.6.2.
S'Range
For every scalar subtype S:
S'Range is equivalent to the 
range 
S'First .. S'Last. See 
3.5.
 A'Range(N)
For a 
prefix 
A that is of an array type (after any implicit dereference), or denotes 
a constrained array subtype:
A'Range(N) is equivalent to the range A'First(N) 
.. A'Last(N), except that the 
prefix 
A is only evaluated once. See 
3.6.2.
S'Class'Read
For every subtype S'Class of a class-wide type T'Class:
S'Class'Read 
denotes a procedure with the following specification: 
procedure S'Class'Read(
   Stream : not null access Ada.Streams.Root_Stream_Type'Class;
   Item : out T'Class)
Dispatches to the subprogram denoted by 
the Read attribute of the specific type identified by the tag of Item. 
See 
13.13.2.
S'Read
For every subtype S of a specific type T:
S'Read denotes 
a procedure with the following specification: 
procedure S'Read(
   Stream : not null access Ada.Streams.Root_Stream_Type'Class;
   Item : out T)
S'Read reads the value of 
Item from 
Stream. See 
13.13.2.
   V'Reduce(Reducer, Initial_Value)
This attribute 
represents a 
reduction expression, and is in the form of a 
reduction_attribute_reference. 
See 
4.5.10.
   X'Reduce(Reducer, Initial_Value)
For a 
prefix 
X of an array type (after any implicit dereference), or that denotes 
an iterable container object (see 
5.5.1):
X'Reduce 
is a reduction expression that yields a result equivalent to replacing 
the 
prefix 
of the attribute with the 
value_sequence: 
[for Item of X => Item]
   P'Relative_Deadline
For a 
prefix 
P that denotes a protected object:
Denotes a non-aliased component of the 
protected object P. This component is of type Ada.Real_Time.Time_Span 
and its value is the relative deadline of P. P'Relative_Deadline denotes 
a variable if and only if P denotes a variable. A reference to this attribute 
shall appear only within the body of P. See 
D.5.2.
S'Remainder
For every subtype S of a floating point type T:
S'Remainder 
denotes a function with the following specification: 
function S'Remainder (X, Y : T)
  return T
For nonzero 
Y, 
let 
v be the value 
X 
– 
n · 
Y, 
where 
n is the integer nearest to the 
exact value of 
X/
Y; 
if |
n – 
X/
Y| 
= 1/2, then 
n is chosen to be even. 
If 
v is a machine number of the type 
T, the function yields 
v; 
otherwise, it yields zero. 
Constraint_Error 
is raised if 
Y is zero. A zero result 
has the sign of 
X when S'Signed_Zeros 
is True. See 
A.5.3.
   F'Result
For a 
prefix 
F that denotes a function declaration or an access-to-function type:
Within a postcondition expression for F, 
denotes the return object of the function call for which the postcondition 
expression is evaluated. The type of this attribute is that of the result 
subtype of the function or access-to-function type except within a Post'Class 
postcondition expression for a function with a controlling result or 
with a controlling access result; in those cases the type of the attribute 
is described above as part of the Name Resolution Rules for Post'Class. 
See 
6.1.1.
S'Round
For every decimal fixed point subtype S:
S'Round denotes 
a function with the following specification: 
function S'Round(X : universal_real)
  return S'Base
The function returns the value obtained 
by rounding X (away from 0, if X is midway between two values of the 
type of S). See 
3.5.10.
S'Rounding
For every subtype S of a floating point type T:
S'Rounding 
denotes a function with the following specification: 
function S'Rounding (X : T)
  return T
The function yields the integral value 
nearest to 
X, rounding away from zero 
if 
X lies exactly halfway between two 
integers. A zero result has the sign of 
X 
when S'Signed_Zeros is True. See 
A.5.3.
S'Safe_First
For every subtype S of a floating point type T:
Yields the lower bound of the safe range 
(see 
3.5.7) of the type 
T. 
If the Numerics Annex is not supported, the value of this attribute is 
implementation defined; see 
G.2.2 for the 
definition that applies to implementations supporting the Numerics Annex. 
The value of this attribute is of the type 
universal_real. See 
A.5.3.
S'Safe_Last
For every subtype S of a floating point type T:
Yields the upper bound of the safe range 
(see 
3.5.7) of the type 
T. 
If the Numerics Annex is not supported, the value of this attribute is 
implementation defined; see 
G.2.2 for the 
definition that applies to implementations supporting the Numerics Annex. 
The value of this attribute is of the type 
universal_real. See 
A.5.3.
S'Scale
For every decimal fixed point subtype S:
S'Scale denotes the 
scale of the 
subtype S, defined as the value N such that S'Delta = 10.0**(–N). 
The scale indicates the position of the point relative 
to the rightmost significant digits of values of subtype S. The value 
of this attribute is of the type 
universal_integer. See 
3.5.10.
S'Scaling
For every subtype S of a floating point type T:
S'Scaling 
denotes a function with the following specification: 
function S'Scaling (X : T;
                    Adjustment : universal_integer)
  return T
Let 
v 
be the value 
X · 
T'Machine_RadixAdjustment. 
If 
v is a machine number of the type 
T, or if |
v| 
≥ 
T'Model_Small, 
the function yields 
v; otherwise, it 
yields either one of the machine numbers of the type 
T 
adjacent to 
v. 
Constraint_Error 
is optionally raised if 
v is outside 
the base range of S. A zero result has the sign of 
X 
when S'Signed_Zeros is True. See 
A.5.3.
S'Signed_Zeros
For every subtype S of a floating point type T:
Yields the value True if the hardware representation 
for the type 
T has the capability of 
representing both positively and negatively signed zeros, these being 
generated and used by the predefined operations of the type 
T 
as specified in IEC 559:1989; yields the value False otherwise. The value 
of this attribute is of the predefined type Boolean. See 
A.5.3.
S'Size
For every subtype S:
If S is definite, 
denotes the size (in bits) that the implementation would choose for the 
following objects of subtype S: 
A record component of subtype S when the 
record type is packed.
The formal parameter of an instance of 
Unchecked_Conversion that converts from subtype S to some other subtype. 
If S is indefinite, the meaning is implementation 
defined. The value of this attribute is of the type 
universal_integer. 
See 
13.3.
 X'Size
For a 
prefix 
X that denotes an object:
Denotes the size in bits of the representation 
of the object. The value of this attribute is of the type 
universal_integer. 
See 
13.3.
S'Small
For every fixed point subtype S:
S'Small denotes the 
small of the 
type of S. The value of this attribute is of the type 
universal_real. 
See 
3.5.10.
S'Storage_Pool
For every access-to-object subtype S:
Denotes the storage pool of the type of 
S. The type of this attribute is Root_Storage_Pool'Class. See 
13.11.
S'Storage_Size
For every access-to-object subtype S:
Yields the result of calling Storage_Size(S'Storage_Pool), 
which is intended to be a measure of the number of storage elements reserved 
for the pool. The type of this attribute is 
universal_integer. 
See 
13.11.
 T'Storage_Size
For a 
prefix 
T that denotes a task object (after any implicit dereference):
Denotes the number of storage elements 
reserved for the task. The value of this attribute is of the type 
universal_integer. 
The Storage_Size includes the size of the task's stack, if any. The language 
does not specify whether or not it includes other storage associated 
with the task (such as the “task control block” used by some 
implementations.) See 
13.3.
   S'Stream_Size
For every subtype S of an elementary type T:
Denotes the 
number of bits read from or written to a stream by the default implementations 
of S'Read and S'Write. Hence, the number of stream elements required 
per item of elementary type T is:
T'Stream_Size / Ada.Streams.Stream_Element'Size
The value of this attribute is of type 
universal_integer and is a multiple of Stream_Element'Size. See 
13.13.2.
S'Succ
For every scalar subtype S:
S'Succ denotes 
a function with the following specification: 
function S'Succ(Arg : S'Base)
  return S'Base
For an enumeration 
type, the function returns the value whose position number is one more 
than that of the value of 
Arg; 
Constraint_Error 
is raised if there is no such value of the type. For an integer type, 
the function returns the result of adding one to the value of 
Arg. 
For a fixed point type, the function returns the result of adding 
small 
to the value of 
Arg. For a floating 
point type, the function returns the machine number (as defined in 
3.5.7) 
immediately above the value of 
Arg; 
Constraint_Error is raised if 
there is no such machine number. See 
3.5.
S'Tag
For every subtype S of a tagged type T (specific or class-wide):
S'Tag denotes the tag of the type 
T 
(or if 
T is class-wide, the tag of the root type of the corresponding 
class). The value of this attribute is of type Tag. See 
3.9.
X'Tag
For a 
prefix 
X that is of a class-wide tagged type (after any implicit dereference):
X'Tag denotes the tag of X. The value of 
this attribute is of type Tag. See 
3.9.
T'Terminated
For a 
prefix 
T that is of a task type (after any implicit dereference):
Yields the value True if the task denoted 
by T is terminated, and False otherwise. The value of this attribute 
is of the predefined type Boolean. See 
9.9.
S'Truncation
For every subtype S of a floating point type T:
S'Truncation 
denotes a function with the following specification: 
function S'Truncation (X : T)
  return T
The function yields the value 
Ceiling(
X) 
when 
X is negative, and 
Floor(
X) 
otherwise. A zero result has the sign of 
X 
when S'Signed_Zeros is True. See 
A.5.3.
S'Unbiased_Rounding
For every subtype S of a floating point type T:
S'Unbiased_Rounding 
denotes a function with the following specification: 
function S'Unbiased_Rounding (X : T)
  return T
The function yields the integral value 
nearest to 
X, rounding toward the even 
integer if 
X lies exactly halfway between 
two integers. A zero result has the sign of 
X 
when S'Signed_Zeros is True. See 
A.5.3.
X'Unchecked_Access
For a 
prefix 
X that denotes an aliased view of an object:
All rules and semantics that apply to X'Access 
(see 
3.10.2) apply also to X'Unchecked_Access, 
except that, for the purposes of accessibility rules and checks, it is 
as if X were declared immediately within a library package. See 
13.10.
S'Val
For every discrete subtype S:
S'Val denotes 
a function with the following specification: 
function S'Val(Arg : universal_integer)
  return S'Base
This 
function returns a value of the type of S whose position number equals 
the value of 
Arg. See 
3.5.5.
X'Valid
For a 
prefix 
X that denotes a scalar object (after any implicit dereference):
Yields True if and only if the object denoted 
by X is normal, has a valid representation, and then, if the preceding 
conditions hold, the value of X also satisfies the predicates
 
of the nominal subtype of X. The value of this attribute is of the predefined 
type Boolean. See 
13.9.2.
S'Value
For every scalar subtype S:
S'Value denotes 
a function with the following specification: 
function S'Value(Arg : String)
  return S'Base
This function returns a value given an 
image of the value as a String, ignoring any leading or trailing spaces. 
See 
3.5.
 P'Version
For a 
prefix 
P that statically denotes a program unit:
Yields a value of the predefined type String 
that identifies the version of the compilation unit that contains the 
declaration of the program unit. See 
E.3.
S'Wide_Image
For every subtype S of a type T:
S'Wide_Image 
denotes a function with the following specification: 
function S'Wide_Image(Arg : S'Base)
  return Wide_String
S'Wide_Image calls S'Put_Image passing 
Arg (which will typically store a sequence 
of character values in a text buffer) and then returns the result of 
retrieving the contents of that buffer with function Wide_Get. See 
4.10.
   X'Wide_Image
For a 
prefix 
X of a type T other than 
universal_real or 
universal_fixed:
X'Wide_Image denotes the result of calling 
function S'Wide_Image with 
Arg being X, where S is the nominal 
subtype of X. See 
4.10.
S'Wide_Value
For every scalar subtype S:
S'Wide_Value 
denotes a function with the following specification: 
function S'Wide_Value(Arg : Wide_String)
  return S'Base
This function returns a value given an 
image of the value as a Wide_String, ignoring any leading or trailing 
spaces. See 
3.5.
   S'Wide_Wide_Image
For every subtype S of a type T:
S'Wide_Wide_Image 
denotes a function with the following specification: 
function S'Wide_Wide_Image(Arg : S'Base)
  return Wide_Wide_String
S'Wide_Wide_Image calls S'Put_Image passing 
Arg (which will typically store a sequence 
of character values in a text buffer) and then returns the result of 
retrieving the contents of that buffer with function Wide_Wide_Get. See 
4.10.
   X'Wide_Wide_Image
For a 
prefix 
X of a type T other than 
universal_real or 
universal_fixed:
X'Wide_Wide_Image denotes the result of 
calling function S'Wide_Wide_Image with 
Arg being X, where S is 
the nominal subtype of X. See 
4.10.
   S'Wide_Wide_Value
For every scalar subtype S:
S'Wide_Wide_Value 
denotes a function with the following specification: 
function S'Wide_Wide_Value(Arg : Wide_Wide_String)
  return S'Base
This function returns a value given an 
image of the value as a Wide_Wide_String, ignoring any leading or trailing 
spaces. See 
3.5.
    S'Wide_Wide_Width
For every scalar subtype S:
S'Wide_Wide_Width denotes the maximum length 
of a Wide_Wide_String returned by S'Wide_Wide_Image over all values of 
the subtype S, assuming a default implementation of S'Put_Image. It denotes 
zero for a subtype that has a null range. Its type is 
universal_integer. 
See 
3.5.
S'Wide_Width
For every scalar subtype S:
S'Wide_Width denotes the maximum length 
of a Wide_String returned by S'Wide_Image over all values of the subtype 
S, assuming a default implementation of S'Put_Image. It denotes zero 
for a subtype that has a null range. Its type is 
universal_integer. 
See 
3.5.
S'Width
For every scalar subtype S:
S'Width denotes the maximum length of a 
String returned by S'Image over all values of the subtype S, assuming 
a default implementation of S'Put_Image. It denotes zero for a subtype 
that has a null range. Its type is 
universal_integer. See 
3.5.
S'Class'Write
For every subtype S'Class of a class-wide type T'Class:
S'Class'Write 
denotes a procedure with the following specification: 
procedure S'Class'Write(
   Stream : not null access Ada.Streams.Root_Stream_Type'Class;
   Item   : in T'Class)
Dispatches to the subprogram denoted by 
the Write attribute of the specific type identified by the tag of Item. 
See 
13.13.2.
S'Write
For every subtype S of a specific type T:
S'Write denotes 
a procedure with the following specification: 
procedure S'Write(
   Stream : not null access Ada.Streams.Root_Stream_Type'Class;
   Item : in T)
S'Write writes the value of 
Item 
to 
Stream. See 
13.13.2.
 Ada 2005 and 2012 Editions sponsored in part by Ada-Europe
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe