comp.lang.ada
 help / color / mirror / Atom feed
* Subtype conformance... not what I was expecting.
@ 2006-07-26  3:02 Peter C. Chapin
  2006-07-26  6:58 ` Craig Carey
                   ` (3 more replies)
  0 siblings, 4 replies; 11+ messages in thread
From: Peter C. Chapin @ 2006-07-26  3:02 UTC (permalink / raw)


I'm experimenting with Ada's handling of access to subprogram types. I 
was surprised to discover that the following example does not work (I'm 
using GNAT GPL 2006):

procedure Check is
    subtype Narrow is Integer range -10..10;
    type Function_Ptr is access function(X : Narrow) return Integer;

    function F(Para : Integer) return Narrow is
    begin
       return Para;
    end F;

    G      : Function_Ptr := F'Access;
    Result : Integer;
begin
    Result := G(0);
end Check;

The compiler complains about the initialization of G with F'Access 
saying that it is not "subtype conformant." However, I believe this 
initialization would be type safe. Since F's argument types are super 
types of G's argument types, there is no context where G can be called 
that would violate the constraints on the underlying arguments of F. 
Similarly since F's return type is a subtype of G's return type, 
anything F might return would be acceptable as a return from G. I 
assumed that this was what subtype conformance was about, but apparently 
not.

In fact, GNAT appears to require the argument and return subtypes to 
match exactly. However, this seems overly restrictive. I'm curious about 
the rationale for this restriction.

Peter



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

end of thread, other threads:[~2006-07-27  0:02 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-07-26  3:02 Subtype conformance... not what I was expecting Peter C. Chapin
2006-07-26  6:58 ` Craig Carey
2006-07-26  7:54 ` Dmitry A. Kazakov
2006-07-26 14:32   ` Peter C. Chapin
2006-07-26 15:38     ` Georg Bauhaus
2006-07-27  0:02       ` Peter C. Chapin
2006-07-26 18:40     ` Dmitry A. Kazakov
2006-07-27  0:00       ` Peter C. Chapin
2006-07-26  8:06 ` Georg Bauhaus
2006-07-26 14:15   ` Peter C. Chapin
2006-07-26 21:23 ` Adam Beneschan

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