From: "Alex R. Mosteo" <devnull@mailinator.com>
Subject: Ada 2005 box (<>) rules in default values
Date: Tue, 17 Jan 2006 09:31:50 +0100
Date: 2006-01-17T09:31:50+01:00 [thread overview]
Message-ID: <43CCAB76.6050907@mailinator.com> (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).
next reply other threads:[~2006-01-17 8:31 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-01-17 8:31 Alex R. Mosteo [this message]
2006-01-17 9:35 ` Ada 2005 box (<>) rules in default values 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
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox