Options: Use Forum View Use Proportional Font Show Text Part by Default Show All Mail Headers Message: [<< First] [< Prev] [Next >] [Last >>] Topic: [<< First] [< Prev] [Next >] [Last >>] Author: [<< First] [< Prev] [Next >] [Last >>]

```Given the following declarations:

declare

type M is (A, E);

type R (D: M := M'First )is  record
case D is
when A => AS: Integer;
when E => ES: Float;
end case;
end record;

subtype RA is r (A);
subtype RE is R (E);

procedure Ass (D: M; Z: out R) is
begin
case D is
when A => Z := (A, 1);
when E => Z := (E, 1.0);
end case;
end Ass;

procedure AssA (Z: out RA) is
begin
Z := (A, 1);
end AssA;

procedure AssE (Z: out RE) is
begin
Z := (E, 1.0);
end AssE;

procedure AssAE (D: M; Z: out R) is
begin
case D is
when A => AssA (Z);
when E => AssE (Z);
end case;
end AssAE;

Z: R;

ZA: R (A);
ZE: R (E);

begin

Ass (E, Z);     -- ok

AssAE (A, Z);   -- Constraint_Error, discriminant E
AssAE (A, ZA);  -- ok

end;

What is the deeper reason for the rules RM_95 6.4.1(14,16)) forcing that
for out parameters with constrained formals, the discriminant of the actual
must match already before the call, for unconstrained formals the dicriminant
of the actual changes as appropriate?

I'm aware of AARM_95 6.4.1(17e).

o     _      _          _
--------- __o       __o      /\_    _ \\o   (_)\__/o   (_)
------- _`\<,_    _`\<,_    _>(_)  (_)/<_     \_| \    _|/' \/
------ (_)/ (_)  (_)/ (_)  (_)         (_)    (_)     (_)'  _\o_
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~