comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Type of the target of an assignment shall not be abstract
Date: Sun, 14 Feb 2010 18:57:48 +0100
Date: 2010-02-14T18:57:40+01:00	[thread overview]
Message-ID: <qjm4z3u0gdun.omqnep7wy8de.dlg@40tude.net> (raw)
In-Reply-To: 770863d9-14ae-4a05-b924-2dfeda7a96a8@f15g2000yqe.googlegroups.com

On Sun, 14 Feb 2010 06:20:32 -0800 (PST), Gautier write-only wrote:

> A question for the RM hermeneutists.
> The instruction marked below with ">>>" goes well through one Ada 95
> compiler (GNAT with -gnat95) but is not accepted by another one
> (ObjectAda 7.2.2).
> Which compiler is right ?
> 
>   procedure Init(
>     xl        : in out Excel_Out_Stream'Class;
>     format    :        Excel_type:= Default_Excel_type
>   )
>   is
>     dummy_xl_with_defaults: Excel_Out_File;
>   begin
>     -- Check if we are trying to re-use a half-finished object
> (ouch!):
>     if xl.is_created and not xl.is_closed then
>       raise Excel_Stream_Not_Closed;
>     end if;
>     dummy_xl_with_defaults.format:= format;
>>>> Excel_Out_Stream(xl):= Excel_Out_Stream(dummy_xl_with_defaults);
>   end Init;
> 
>>>> excel_out.adb: Error: line 595 col 5 LRM:3.9.3(8), The type of the target of an assignment shall not be abstract
> 
> For those asking themselves what the *@#$! that code is doing, since
> the xl variable is already initialized, the purpose of the := is to re-
> initialize an object (xl) with the default values of the root type.
> Since the root type is abstract, I need a concrete derived object
> (dummy_xl_with_defaults) to get these default values. Subsidiary
> question: is there another way of doing that in one ':=' ?

   package P is
      type T is abstract tagged private;
      procedure Reset (X : in out T'Class);
   private
      type Root is tagged record -- Non-abstract
         I : Integer;
      end record;
      type T is abstract new Root with null record;
   end P;

   package body P is
      Defaults : Root := (I => 123);
      
      procedure Reset (X : in out T'Class) is
      begin
         Root (X) := Defaults;
      end Reset;
   end P;.

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de



  reply	other threads:[~2010-02-14 17:57 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-02-14 14:20 Type of the target of an assignment shall not be abstract Gautier write-only
2010-02-14 17:57 ` Dmitry A. Kazakov [this message]
2010-02-15 17:05 ` Adam Beneschan
2010-02-15 19:00   ` Hibou57 (Yannick Duchêne)
2010-02-23 21:19     ` Robert A Duff
2010-02-16  0:59   ` Adam Beneschan
2010-02-16 10:03     ` Gautier write-only
2010-02-16 12:14       ` Gautier write-only
2010-02-16 16:12       ` Adam Beneschan
2010-02-28 17:00 ` Gautier write-only
replies disabled

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