Index: base/numerics/safe_conversions_impl.h |
diff --git a/base/numerics/safe_conversions_impl.h b/base/numerics/safe_conversions_impl.h |
index aef7135cefb8177e397a9a5729dd9282b2ff6669..713b8efbea7a0806bbc2e9693ac48592df770d92 100644 |
--- a/base/numerics/safe_conversions_impl.h |
+++ b/base/numerics/safe_conversions_impl.h |
@@ -549,6 +549,7 @@ struct UnderlyingType { |
using type = typename ArithmeticOrUnderlyingEnum<T>::type; |
static const bool is_numeric = std::is_arithmetic<type>::value; |
static const bool is_checked = false; |
+ static const bool is_clamped = false; |
static const bool is_strict = false; |
}; |
@@ -590,14 +591,17 @@ template <typename L, typename R> |
struct IsClampedOp { |
static const bool value = |
UnderlyingType<L>::is_numeric && UnderlyingType<R>::is_numeric && |
- (UnderlyingType<L>::is_clamped || UnderlyingType<R>::is_clamped); |
+ (UnderlyingType<L>::is_clamped || UnderlyingType<R>::is_clamped) && |
+ !(UnderlyingType<L>::is_checked || UnderlyingType<R>::is_checked); |
}; |
template <typename L, typename R> |
struct IsStrictOp { |
static const bool value = |
UnderlyingType<L>::is_numeric && UnderlyingType<R>::is_numeric && |
- (UnderlyingType<L>::is_strict || UnderlyingType<R>::is_strict); |
+ (UnderlyingType<L>::is_strict || UnderlyingType<R>::is_strict) && |
+ !(UnderlyingType<L>::is_checked || UnderlyingType<R>::is_checked) && |
+ !(UnderlyingType<L>::is_clamped || UnderlyingType<R>::is_clamped); |
}; |
template <typename L, typename R> |