comp.lang.ada
 help / color / mirror / Atom feed
* Problems using Generic_Dispatching_Constructor
@ 2022-06-01 11:36 Mark Lorenzen
  2022-06-01 12:42 ` Dmitry A. Kazakov
  0 siblings, 1 reply; 3+ messages in thread
From: Mark Lorenzen @ 2022-06-01 11:36 UTC (permalink / raw)


The generic function Ada.Tags.Generic_Dispatching_Constructor is defined as:

generic
   type T (<>) is abstract tagged limited private;
   type Parameters (<>) is limited private;
   with function Constructor (Params : not null access Parameters) return T is abstract;

function Ada.Tags.Generic_Dispatching_Constructor (The_Tag : Tag; Params  : not null access Parameters) return T'Class;

This gives us some problems when calling an instance of Ada.Tags.Generic_Dispatching_Constructor when the Params parameter is an in-mode parameter of a function e.g.:

function Make (From_Params : in P) return T'Class
   is
      function Make_T_Class is new Ada.Tags.Ada.Tags.Generic_Dispatching_Constructor (T => T, Parameters => P, Constructor => ...);
   begin
   ...
   return Make_T_Class (Some_Tag, P'Access);
   end Make;

This results in a compile-time error:
error: access-to-variable designates constant

Why is function Ada.Tags.Generic_Dispatching_Constructor defined as:
function Ada.Tags.Generic_Dispatching_Constructor (The_Tag : Tag; Params  : not null access Parameters) return T'Class;

and not as e.g (note the access-to-constant type):
function Ada.Tags.Generic_Dispatching_Constructor (The_Tag : Tag; Params  : not null access constant Parameters) return T'Class;

I guess we could declare function Make as (note the in-out mode):
function Make (From_Params : in out P) return T'Class
But this is horrible as functions should never ever have in-out or out-mode parameters (or side effects in general).

Why are access types used at all?

Is there another workaround?

Regards,
Mark L

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

end of thread, other threads:[~2022-06-01 21:25 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-06-01 11:36 Problems using Generic_Dispatching_Constructor Mark Lorenzen
2022-06-01 12:42 ` Dmitry A. Kazakov
2022-06-01 21:25   ` Randy Brukardt

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