On Tue, Jun 4, 2019 at 22:34 Thiago Macieira via Std-Discussion <std-discussion@lists.isocpp.org> wrote:
On Tuesday, 4 June 2019 12:59:33 PDT Myria via Std-Discussion wrote:
> But "the source value is between two adjacent destination values" is
> true; namely FLT_MAX and +infinity.  With this interpretation of the
> wording, it seems like the result ought to be an
> implementation-defined choice between FLT_MAX and +infinity.  (I would
> argue that because std::numeric_limits<float>::is_iec559() is true in
> this implementation, its "choice" must be what IEC 559 / IEEE 754
> mandates in this situation.)
> What is the correct interpretation here?

I don't read that as the correct interpretation. Infinite is not adjacent to
anything. Adjacency can only be seen between two finite numbers.

In particular, I read the wording specifically for this case: out of range. If
the number is bigger than the largest representable *finite* value or the
smallest one, then it's UB.

Should I file an editorial issue to clear it up, then?

Also, I should look up IEEE 754 rules.  C++ says floating-point divide by zero is undefined behavior, but IEEE 754 defines it.  Do implementations that claim support IEEE 754 in is_iec559 have to define floating-point operations that IEEE 754 defines but C++ itself does not?