comp.lang.ada
 help / color / mirror / Atom feed
* Making sense of predicates
@ 2013-10-21 19:51 Dmitry A. Kazakov
  2013-10-22  4:35 ` Randy Brukardt
                   ` (2 more replies)
  0 siblings, 3 replies; 23+ messages in thread
From: Dmitry A. Kazakov @ 2013-10-21 19:51 UTC (permalink / raw)


Considering this:

   type T is tagged null record;
   procedure P (X : T);

   type S is new T with null record;
   procedure Q (X : T);

   subtype Subclass is T'Class with
      Dynamic_Predicate => Subclass in S'Class;
      -- Should have been Static_Predicate, but illegal

Now:

   X : Subclass := S'(null record);
begin
   X.P;
   X.Q; -- Illegal

Well, predicates were not supposed to work in an intelligent way, so why
not to add a kind that will?

There are number of cases where this would be very useful. E.g. smart
pointers:

   type T1 is tagged ...;
   type T1_Ptr is access all T1'Class;
   type H1 is new Ada.Finalization.Controlled with record -- Handle type
       Ptr : T1_Ptr;
   end record;

   type T2 is new T1 with ...;

Presently it is impossible to derive H2 from H1 constrained to point to
T2'Class. (Neither it were possible with implicit dereferencing)

With the above, one would create a subtype of H1 constrained to T2'Class
and then derive from it (better in one step, of course).

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


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

end of thread, other threads:[~2013-10-24  7:26 UTC | newest]

Thread overview: 23+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-10-21 19:51 Making sense of predicates Dmitry A. Kazakov
2013-10-22  4:35 ` Randy Brukardt
2013-10-22  8:19   ` Dmitry A. Kazakov
2013-10-22 12:53     ` Georg Bauhaus
2013-10-22 13:38       ` Dmitry A. Kazakov
2013-10-22 20:38         ` Georg Bauhaus
2013-10-24  4:03     ` Randy Brukardt
2013-10-24  7:26       ` Dmitry A. Kazakov
2013-10-22  7:14 ` Shark8
2013-10-22  7:35   ` Jacob Sparre Andersen
2013-10-22 17:26     ` Shark8
2013-10-23  7:56       ` Jacob Sparre Andersen
2013-10-24  3:58       ` Randy Brukardt
2013-10-22  8:11   ` Dmitry A. Kazakov
2013-10-22  7:20 ` Jacob Sparre Andersen
2013-10-22  7:57   ` Dmitry A. Kazakov
2013-10-22 14:52     ` Dan'l Miller
2013-10-22 16:30       ` Dmitry A. Kazakov
2013-10-22 17:15         ` Dan'l Miller
2013-10-22 19:26           ` Dmitry A. Kazakov
2013-10-22 19:49             ` J-P. Rosen
2013-10-22 21:30             ` Dan'l Miller
2013-10-23  9:25               ` Dmitry A. Kazakov

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