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_ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Mein Radunfall My bike accident Christoph Grein Mitglied von Ada-Deutschland Member of Ada Germany http:/www.ada-deutschland.de http://home.T-Online.de/home/Christ-Usch.Grein eMail: [log in to unmask]