Talk About Network

Google


Register and Login
Nick
Password
Register create new account Sign up is FREE and you can post replies, new topics, bookmark posts and more!
Recover lost password


Programming > Ada > Re: Discriminan...
Latest [ Topics | Posts ] Archive Post A New Topic Post a Reply
<< Topic < Post Post 2 of 9 Topic 5610 of 5931
Post > Topic >>

Re: Discriminant ans tagged type ?!

by Adam Beneschan <adam@[EMAIL PROTECTED] > Mar 18, 2008 at 08:54 AM

On Mar 18, 8:22 am, Tony <truand.t...@[EMAIL PROTECTED]
> wrote:
> I just do not understand why the following code compiles with the Aonix
> compiler and not with the Gnat GPL 2007?

Because one of the compilers has a bug.

Or did you want a *helpful* answer???  :) :) :)

>
>      package A_Pkg is
>          type A (L : Natural) is tagged null record;
>      end A_Pkg;
>
>      package A_Pkg.B_Pkg is
>          type B is new A with record
>              T : String(1..L);
>          end record;
>      end A_Pkg.B_Pkg;
>
>      with A_Pkg.B_Pkg;
>      procedure Strange is
>      begin
>          null;
>      end Strange;
>
>     => RM95 3.7 (18) ??

Yes, B inherits the discriminant L, but this doesn't make L
*visible*.  In order to use L by itself, as you did in the definition
of the component T, L has to be directly visible.  The rules for this
are in 8.1 and 8.2, and aren't easy to understand.  The applicable
rules here are that: The declaration of L (when the discriminant is
first declared) is visible up to the end of the declarative region
immediately enclosing it, which is the definition of the type A.  But
this declarative region does *not* encompass the declarations of any
type extensions.  (Also, the fact that B "inherits" L is not
equivalent to there being an implicit declaration of L; unlike
inherited subprograms, inherited discriminants aren't implicitly
declared.)  Thus, L is not directly visible within the declaration of
B.

However, I tried changing the declaration of T as follows:

   T : String (1 .. B.L);

and GNAT accepted it.  (I haven't done enough testing to make sure
GNAT handles it correctly in other ways, though.)  Here, B refers to
the "current instance" of the type (8.6(17)), and 3.7(18) means that
all instances of the type will have a component L that is inherited
from A, so this should be legal unless there are some other rules that
I've missed (and that GNAT also missed).

Hope this helps,

                                 -- Adam
 




 9 Posts in Topic:
Discriminant ans tagged type ?!
Tony <truand.tony@[EMA  2008-03-18 16:22:36 
Re: Discriminant ans tagged type ?!
Adam Beneschan <adam@[  2008-03-18 08:54:53 
Re: Discriminant ans tagged type ?!
Adam Beneschan <adam@[  2008-03-18 12:54:03 
Re: Discriminant ans tagged type ?!
Tony <truand.tony@[EMA  2008-03-21 01:18:58 
Re: Discriminant ans tagged type ?!
Adam Beneschan <adam@[  2008-03-21 08:25:38 
Re: Discriminant ans tagged type ?!
Simon Wright <simon.j.  2008-03-21 16:46:43 
Re: Discriminant ans tagged type ?!
Tony <truand.tony@[EMA  2008-03-22 02:05:04 
Re: Discriminant ans tagged type ?!
"Tom Grosman" &  2008-04-04 17:40:37 
Re: Discriminant ans tagged type ?!
Robert A Duff <bobduff  2008-03-18 14:40:29 

Post A Reply:
  Go here to Signup

AddThis Feed Button


About - Advertising - Contact - Frequently Asked Questions - Privacy Policy - Terms of Use - Signup

Contact
tan12V112 Wed Oct 15 19:38:45 CDT 2008.