From: Jere <jhb.chat@gmail.com>
Subject: Re: limited agregate and limited components default initialization
Date: Sat, 31 Mar 2018 19:54:54 -0700 (PDT)
Date: 2018-03-31T19:54:54-07:00 [thread overview]
Message-ID: <701dc084-b5ea-4990-9c06-a56fd738a4fa@googlegroups.com> (raw)
In-Reply-To: <27d34604-c37e-4731-886d-41cdc6addfec@googlegroups.com>
On Saturday, March 31, 2018 at 10:40:22 PM UTC-4, Jere wrote:
> On Saturday, March 31, 2018 at 10:07:20 PM UTC-4, Jean-Claude Rostaing wrote:
> > --
> > -- Item_type and ITEM_RECORD are NOT meant to be declared uninitialized, ever.
> > -- So how do I tell this to GNAT so that Item: aliased ITEM_TYPE as a component is allowed ?
> > -- Implementing List_type with common access types and "type Bla, type Blabla is access Bla, complete declaration" would have been easy, but the private type Smart_Pointers made a hell of it.
> >
> > with Pointers;
> >
> > generic
> > type Item_Type(<>) is limited private;
> > package Lists is
> > type List_Type is limited private;
> > type Item_Accessor (Item: not null access Item_type) is limited private with Implicit_Dereference => Item;
> > function Get(Position: in List_Iterator) return Item_Accessor;
> > private
> > type ITEM_ACCESS;
> > type Item_Record is limited
> > record
> > Item: aliased Item_type;
> > Next : Item_Access;
> > Pred : Item_Access;
> > end record;
> > package Record_Pointers is new Pointers (Item_type => Item_Record);
> > type Item_Access is new Record_Pointers.Smart_Pointers;
> >
> > type Item_Accessor (Item: not null access Item_type) is limited record
> > REF: ITEM_ACCESS := SET(ITEM_RECORD'(ITEM.all, others => <>));
> > end record;
> >
> > type List_Type is limited record
> > First: Item_Access;
> > Last : Item_Access;
> > Count : Natural := 1;
> > end record;
> > end Lists;
> >
> > And what I was pointing your attention at was:
> > lists.ads:39:49: initialization not allowed for limited types
> > for: REF: ITEM_ACCESS := SET(ITEM_RECORD'(ITEM.all, others => <>));
>
> Ok, your problems:
> 1. For your Item_Record type, the parameter Item, cannot be of type
> Item_Type as it is unconstrained. That is what gives you the first
> error
To clarify because I typed that horribly: Item_Type cannot be an
unconstrained type if you wish to make it a component of a record.
It needs a constraint. That's why you have to remove the (<>)
in your generic formal for Item_Type.
next prev parent reply other threads:[~2018-04-01 2:54 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-03-31 23:36 limited agregate and limited components default initialization Jean-Claude Rostaing
2018-04-01 0:52 ` Jere
2018-04-01 1:12 ` Jere
2018-04-01 1:16 ` Jean-Claude Rostaing
2018-04-01 1:34 ` Jere
2018-04-01 2:07 ` Jean-Claude Rostaing
2018-04-01 2:40 ` Jere
2018-04-01 2:54 ` Jere [this message]
2018-04-01 3:14 ` Jere
2018-04-01 3:31 ` Jere
2018-04-01 9:32 ` Jacob Sparre Andersen
2018-04-01 12:58 ` Jean-Claude Rostaing
2018-04-01 13:33 ` Dmitry A. Kazakov
2018-04-01 15:46 ` Jean-Claude Rostaing
2018-04-01 15:53 ` Jean-Claude Rostaing
2018-04-01 15:54 ` Jean-Claude Rostaing
2018-04-01 21:31 ` Dmitry A. Kazakov
2018-04-02 3:44 ` Randy Brukardt
2018-04-02 11:25 ` Jean-Claude Rostaing
2018-04-02 12:11 ` Dmitry A. Kazakov
2018-04-02 12:15 ` Jean-Claude Rostaing
2018-04-02 21:37 ` Randy Brukardt
2018-04-03 17:01 ` Jeffrey R. Carter
2018-04-05 10:27 ` AdaMagica
2018-04-02 3:42 ` Randy Brukardt
2018-04-01 22:52 ` Jean-Claude Rostaing
2018-04-01 23:36 ` Jean-Claude Rostaing
2018-04-01 23:39 ` Jean-Claude Rostaing
2018-04-02 18:19 ` Jere
2018-04-02 18:50 ` Dmitry A. Kazakov
2018-04-02 19:46 ` Jere
2018-04-02 19:59 ` Dmitry A. Kazakov
2018-04-02 21:03 ` Jean-Claude Rostaing
2018-04-03 8:14 ` Dmitry A. Kazakov
2018-04-03 1:27 ` Dennis Lee Bieber
2018-04-02 22:39 ` Robert I. Eachus
2018-04-03 18:18 ` Jean-Claude Rostaing
2018-04-03 18:28 ` Jean-Claude Rostaing
2018-04-03 19:18 ` Jeffrey R. Carter
2018-04-03 19:25 ` Jean-Claude Rostaing
2018-04-03 20:12 ` Jeffrey R. Carter
2018-04-03 22:37 ` Jean-Claude Rostaing
2018-04-04 2:18 ` Jere
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox