comp.lang.ada
 help / color / mirror / Atom feed
* Ada 2005 box (<>) rules in default values
@ 2006-01-17  8:31 Alex R. Mosteo
  2006-01-17  9:35 ` Martin Dowie
                   ` (3 more replies)
  0 siblings, 4 replies; 13+ messages in thread
From: Alex R. Mosteo @ 2006-01-17  8:31 UTC (permalink / raw)


Hi all,

I have a doubt with the box operator as newly introduced in Ada 2005 to 
allow in place initialization of limited types. I'm not sure of all the 
details so anything I say can be wrong; if so please correct me.

My understanding is that you use the <> value to denote the default 
value of a field in, for example a (limited or not) record:

Blah : constant Thing :=
  	(First_Component  => 3,
          Second_Component => 4,
          others => <>);

This actually compiles in GNAT GAP/GPL, but there's a thing happening 
that I don't know if it's that it isn't still completely implemented in 
Gnat, or is the expected behavior.

Say, for example, that Thing above is declared like:

type Thing is record
    First_Component  : Integer;
    Second_Component : Integer;
    Third_Component  : Integer := 5;
end record;

I'm finding that if I use the box as in the first example above, the 
third component will not receive its default value from the type 
definition (5), but will be uninitialized. I've noticed this because 
initializing types like this:

type Other_Thing is record
     X : Integer;
     L : List;
     -- From some instantiation of Ada.Containers.Doubly_Linked_Lists
end record;

with

Y : Other_Thing := (X => 5, others => <>);

This initialization more often than not will have an invalid list (i.e. 
not an empty list, but one with improper values that fails when used).

I've read the Aggregates Issues in the "Gnat and Ada 2005" document, and 
there the <> initializer is mentioned primarily in relation to limited 
types. From that document I read:

"The box notation ("<>") is now used to denote the default 
initialization for a component of an aggregate, that is to say an 
invocation of the initialization procedure for the component type."

And

"Note that the "others => <>" notation is allowed even when the 
associated components are not of the same type. Its meaning is as 
follows: if a component has a default expression in the record type, the 
expression is used; otherwise, the normal default initialization for its 
type is used."

 From these paragraphs I understand that Gnat is not implementing 
correctly that feature for the moment. So I ask if you knowledgeable lot 
agree with my impression. (A pointer to the amendment dealing with this 
will also be welcome).



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

end of thread, other threads:[~2006-01-19  9:19 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-01-17  8:31 Ada 2005 box (<>) rules in default values Alex R. Mosteo
2006-01-17  9:35 ` Martin Dowie
2006-01-17 13:35 ` ME
2006-01-17 17:19   ` Pascal Obry
2006-01-17 20:25     ` Randy Brukardt
2006-01-17 20:29 ` Randy Brukardt
2006-01-17 21:15 ` Björn Persson
2006-01-18 11:04   ` Alex R. Mosteo
2006-01-18 14:09     ` Jean-Pierre Rosen
2006-01-18 15:59       ` Alex R. Mosteo
2006-01-18 21:54         ` Randy Brukardt
2006-01-19  9:19           ` Alex R. Mosteo
2006-01-18 21:32     ` Björn Persson

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