| 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>
|
|
|