On Mon, 2014-11-10 at 09:38 +0900, Malcolm Cohen wrote:
> >There was an interp that resulted in
> >
> > integer, parameter :: N = bit_size(n)
> >
> >being illegal. How is this one different?
>
> That's a confusing question, since I indicated that I did think it was
> (probably) outside the standard...
Maybe we need to revisit interp f95/000090. The fourth and sixth
examples were
4. character :: C(10)*(size(c,1))
6. integer :: B = bit_size(b)
The answer was "None of the examples are legal."
The current text of the standard, that Malcolm referenced below, makes
example 4 clearly illegal, because the inquired property is specified
within the same <entity-decl>, viz. "C(10)*(size(c,1))". But in example
6, is the property specified by "integer ::" or by "B"?
> The interp was Fortran 95, so pretty ancient history, and mostly asking
> about things like
>
> INTEGER :: P(complicated_expression_for_lower_bound_1: &
> & complicated_expression_for_upper_bound_1, &
> & complicated_expression_for_lower_bound_2: &
> & complicated_expression_for_upper_bound_2) = &
> & RESHAPE( (/ 11, 21, 12, 22 /), SHAPE(P) )
>
> and the answer was that that was not allowed (plus a whole load of others).
>
> The relevant text in the standard is
>
> "If a constant expression includes a specification inquiry that depends on
> a type parameter or an array bound of an entity specified in the same
> specification-part , the type parameter or array bound shall be specified in
> a prior specification of the specification-part . The prior specification
> may be to the left of the specification inquiry in the same statement, but
> shall not be within the same entity-decl ."
>
> Now, in the case of "double precision :: max_allowed...", the question is
> whether the specification of the type and kind are considered to occur at
> the type-spec, or whether they occur at the (first) occurrence of
> "max_allowed". If the former, there is nothing wrong. If the latter, it
> is beyond the standard. From the text of the interp answer, one would think
> the latter, but the text in the standard itself is not 100% clear.
>
> (And I think that few if any compilers will reject or even warn about this
> particular case.)
>
> I rest my case with "at best, confusingly bad style".
>
> Cheers,
|