I don't know the reason for the restriction, but could hazard a guess.
What you are doing really is constraining a subtype. Therefore, to make
sure you and all readers know what the constraints are, and don't
mistakenly think that only a subset of the discriminants are fixed for
the subtype, all discriminants must be given. Again, this is only a
guess. However, it has been said by many, many people that Ada is a
reader's language, not a writer's language.
Roger
On Fri, 2005-06-03 at 15:20, Chris Sparks wrote:
> The problem is that I rarely use discriminants. It just seems silly to
> me that given that there are initializers on the type definition below,
> the compiler can deduce what the other value is for MR2 and MR3. Now if
> I didn't have initializers then that be a whole different matter.
>
> C.
>
> Roger Racine wrote:
>
> >3.7.1(8) says "A discriminant_constraint shall provide exactly one value
> >for each discriminant of the subtype being constrained." While one
> >might think that one is constraining a discriminant, and thus only need
> >to put in the subset of discriminants you want to constrain, the subtype
> >is what is being constrained, and yours has 2 discriminants, both of
> >which need values. That has been there since Ada 83.
> >
> >Roger Racine
> >
> >On Fri, 2005-06-03 at 12:24, Chris Sparks wrote:
> >
> >
> >>Hello experts!
> >>
> >>I thought I understood discriminants, however, when I tried to assign to
> >>MR2 and MR3 below, the compiler barked at me...
> >>
> >>----------------------------------------------------
> >> type My_Record (Item : Integer := 1;
> >> Data : Integer := 2) is record
> >> Stuff : Integer := Item * Data;
> >> end record;
> >>
> >> MR1 : My_Record;
> >>--MR2 : My_Record (Data => 3);
> >>--MR3 : My_Record (Item => 3);
> >> MR4 : My_Record (Item => 10, Data => 11);
> >>----------------------------------------------------
> >>
> >>Can someone enlighten me on this?
> >>
> >>Chris Sparks
> >>
> >>
> >
> >
> >
> >
|