diff options
Diffstat (limited to 'ink_stroke_modeler/internal/validation.h')
-rw-r--r-- | ink_stroke_modeler/internal/validation.h | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/ink_stroke_modeler/internal/validation.h b/ink_stroke_modeler/internal/validation.h index 0b69ba5..d266a82 100644 --- a/ink_stroke_modeler/internal/validation.h +++ b/ink_stroke_modeler/internal/validation.h @@ -7,12 +7,16 @@ template <typename T> absl::Status ValidateIsFiniteNumber(T value, absl::string_view label) { - if (std::isnan(value)) { - return absl::InvalidArgumentError(absl::Substitute("$0 is NaN", label)); - } - if (std::isinf(value)) { - return absl::InvalidArgumentError( - absl::Substitute("$0 is infinite", label)); + // std::isnan(integer value) fails to compile with Lexan C++20 + // (b/329239835), so only call std::isnan for floating point values. + if constexpr (std::is_floating_point_v<T>) { + if (std::isnan(value)) { + return absl::InvalidArgumentError(absl::Substitute("$0 is NaN", label)); + } + if (std::isinf(value)) { + return absl::InvalidArgumentError( + absl::Substitute("$0 is infinite", label)); + } } return absl::OkStatus(); } |