comp.lang.ada
 help / color / mirror / Atom feed
* Assignment access type with discriminants
@ 2023-03-22  9:19 Dmitry A. Kazakov
  2023-03-22  9:31 ` Björn Lundin
                   ` (2 more replies)
  0 siblings, 3 replies; 11+ messages in thread
From: Dmitry A. Kazakov @ 2023-03-22  9:19 UTC (permalink / raw)


I stumbled on a curious fact.

The value of an object with a discriminant can be changed to a value 
with a different discriminant if the type's discriminants are defaulted.

Right?

Wrong! Not through an access type!

procedure Test is
    type F is (F1, F2, F3);
    type Foo (K : F := F1) is record
       case K is
          when F1 =>
             X1 : Integer;
          when F2 =>
             X2 : Float;
          when F3 =>
             X3 : String (1..2);
       end case;
    end record;
    type Foo_Ptr is access all Foo;
    X : aliased Foo;
    P : Foo_Ptr := X'Access;
begin
    X := (F2, 1.0);   -- OK
    P.all := (F1, 3); -- Error!
end Test;

Is this a compiler bug or intentional language design? Any language lawyers?

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

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

end of thread, other threads:[~2023-03-25  8:51 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-03-22  9:19 Assignment access type with discriminants Dmitry A. Kazakov
2023-03-22  9:31 ` Björn Lundin
2023-03-22 14:10 ` G.B.
2023-03-23 11:51   ` Dmitry A. Kazakov
2023-03-23 16:53     ` AdaMagica
2023-03-23 18:09       ` Niklas Holsti
2023-03-23 17:04 ` J-P. Rosen
2023-03-23 18:55   ` Niklas Holsti
2023-03-23 19:53     ` Dmitry A. Kazakov
2023-03-24  9:41     ` J-P. Rosen
2023-03-25  8:51       ` Randy Brukardt

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