Document potentially confusing behavior in gsl::narrow (#1073)

NaN != Nan, so the comparisons used in gsl::narrow will always throw when attempting to cast a NaN value. This may be surprising, so document it.
This commit is contained in:
dmitrykobets-msft 2022-12-24 11:49:26 -08:00 committed by GitHub
parent 6c6111acb7
commit 46c72713f2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -52,6 +52,7 @@ GSL_SUPPRESS(p.2) // NO-FORMAT: attribute // don't rely on undefined behavior
#pragma GCC diagnostic push #pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wfloat-equal" #pragma GCC diagnostic ignored "-Wfloat-equal"
#endif #endif
// Note: NaN will always throw, since NaN != NaN
if (static_cast<U>(t) != u || (is_different_signedness && ((t < T{}) != (u < U{})))) if (static_cast<U>(t) != u || (is_different_signedness && ((t < T{}) != (u < U{}))))
{ {
throw narrowing_error{}; throw narrowing_error{};