https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118499

--- Comment #14 from kargls at comcast dot net ---
(In reply to anlauf from comment #13)
> (In reply to kargls from comment #12)
> > (In reply to Thomas Koenig from comment #9)
> > > Question is, what should we permit...
> > > 
> > > For 'normal' operations, only unsigned op unsigned is permitted,
> > > so unsigned**unsigned is obviously ok.
> > > 
> > > What about (integer|real|complex)**unsigned?
> > > 
> > > What about unsigned**integer?
> > > 
> > > Since exponentiation is special (and also does not involve
> > > type conversion) my feeling is to allow it all.
> > > 
> > > Comments?
> > 
> > Agree with the others.  Supporting the above is fine.
> > What about allowing unsigned**(real|complex)? The Fortran standard
> > allows integer**(real|complex).
> 
> I would vote against this.  Mathematically, the result cannot be an
> unsigned.

As I noted, the standard allows integer**(real|complex).

% cat a.f90
program foo
   integer u
   real x
   complex c
   x = 1.25
   u = 2
   c = (1.25,3.14)
   print *, u**x, u**c
end program
% gfcx -o z -std=f2018 a.f90 && ./z
   2.37841415                (-1.35409331,1.95532227)

The result is not integer.  It literally is the expected
mathematical expression exp((real|complex)*log(unsigned))

Reply via email to