comp.lang.ada
 help / color / mirror / Atom feed
* Out parameters and unconstrained variant types
@ 2008-06-27  0:22 Gene
  2008-06-27  0:49 ` anon
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Gene @ 2008-06-27  0:22 UTC (permalink / raw)


Hello friends,

I would like to do something like:

type Conditional_Result (Exists : Boolean := False) is
  record case Exists is
    when True =>
      Value : Natural;
    when False => null;
  end record;

procedure Do_Something(x : in Natural; rtn : out Conditional_Result)
is
begin
  if x = 0 then
    rtn := (Exists => False);
  else
    rtn := (Exists => True; Value => x + 1);
  end if;
end;

procedure Foo is
  rtn : Conditional_Result;
begin
  Do_Something(0, rtn);
  if rtn.Exists then
    Put_Line("Yes!");
  end if;
  Do_Something(1, rtn);
  if rtn.Exists then
    Put_Line("Yes!");
  end if;
end;

ALRM 2005 and Barnes seem to say the procedure Do_Something will know
that rtn in foo is unconstrained and allow both calls to succeed.  In
GNAT 2007, the second call fails with a constraint error at the
assignment to rtn.  Can you tell me what I'm missing?

Thanks!



^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2008-06-27  7:58 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-06-27  0:22 Out parameters and unconstrained variant types Gene
2008-06-27  0:49 ` anon
2008-06-27  2:40 ` Adam Beneschan
2008-06-27  7:11 ` Georg Bauhaus
2008-06-27  7:58 ` Dmitry A. Kazakov

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox