https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118274
Bug ID: 118274 Summary: expression function fails when normal equivalent ones don't. Product: gcc Version: 14.2.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: ada Assignee: unassigned at gcc dot gnu.org Reporter: 00120260a at gmail dot com CC: dkm at gcc dot gnu.org Target Milestone: --- This is not normal: > q09.ada:19:61: error: there is no applicable operator "*" for type "Rates" > defined at line 3 procedure Main is type Money is delta 0.01 digits 12; type Rates is delta 0.00000001 digits 11; Conversion: constant array(1..2, 1..2) of Rates := ((1.0, 0.5059), (1.9767, 1.0)); Special: constant Rates := 1.1; Extra: Boolean := True; function "*"(Left, Right: Rates) return Rates is begin if Extra then return Standard."*"(Left, Right+0.01); else return Standard."*"(Left, Right); end if; end "*"; function "-"(Left, Right: Rates) return Rates is begin return Standard."*"(Left, Right+(if Extra then 0.01 else 0.0)); end "-"; function "+"(Left, Right: Rates) return Rates is (Standard."*"(Left, Right+(if Extra then 0.01 else 0.0))); -- FAILS begin null; end Main;