aboutsummaryrefslogtreecommitdiff
path: root/ink_stroke_modeler/internal/validation.h
diff options
context:
space:
mode:
Diffstat (limited to 'ink_stroke_modeler/internal/validation.h')
-rw-r--r--ink_stroke_modeler/internal/validation.h16
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();
}