@@ -45,6 +45,8 @@ constexpr double kMaxDoubleRepresentableAsInt =
4545constexpr double kMaxDoubleRepresentableAsUint =
4646 static_cast <double >(kUint64Max - RoundingError<uint64_t >());
4747
48+ #define CEL_ABSL_VISIT_CONSTEXPR
49+
4850namespace internal {
4951
5052using NumberVariant = absl::variant<double , uint64_t , int64_t >;
@@ -169,15 +171,15 @@ struct IntCompareVisitor {
169171struct CompareVisitor {
170172 explicit constexpr CompareVisitor (NumberVariant rhs) : rhs(rhs) {}
171173
172- constexpr ComparisonResult operator ()(double v) {
174+ CEL_ABSL_VISIT_CONSTEXPR ComparisonResult operator ()(double v) {
173175 return absl::visit (DoubleCompareVisitor (v), rhs);
174176 }
175177
176- constexpr ComparisonResult operator ()(uint64_t v) {
178+ CEL_ABSL_VISIT_CONSTEXPR ComparisonResult operator ()(uint64_t v) {
177179 return absl::visit (UintCompareVisitor (v), rhs);
178180 }
179181
180- constexpr ComparisonResult operator ()(int64_t v) {
182+ CEL_ABSL_VISIT_CONSTEXPR ComparisonResult operator ()(int64_t v) {
181183 return absl::visit (IntCompareVisitor (v), rhs);
182184 }
183185 NumberVariant rhs;
@@ -233,66 +235,67 @@ class CelNumber {
233235 constexpr explicit CelNumber (uint64_t uint_value) : value_(uint_value) {}
234236
235237 // Return a double representation of the value.
236- constexpr double AsDouble () const {
238+ CEL_ABSL_VISIT_CONSTEXPR double AsDouble () const {
237239 return absl::visit (internal::ConversionVisitor<double >(), value_);
238240 }
239241
240242 // Return signed int64_t representation for the value.
241243 // Caller must guarantee the underlying value is representatble as an
242244 // int.
243- constexpr int64_t AsInt () const {
245+ CEL_ABSL_VISIT_CONSTEXPR int64_t AsInt () const {
244246 return absl::visit (internal::ConversionVisitor<int64_t >(), value_);
245247 }
246248
247249 // Return unsigned int64_t representation for the value.
248250 // Caller must guarantee the underlying value is representable as an
249251 // uint.
250- constexpr uint64_t AsUint () const {
252+ CEL_ABSL_VISIT_CONSTEXPR uint64_t AsUint () const {
251253 return absl::visit (internal::ConversionVisitor<uint64_t >(), value_);
252254 }
253255
254256 // For key lookups, check if the conversion to signed int is lossless.
255- constexpr bool LosslessConvertibleToInt () const {
257+ CEL_ABSL_VISIT_CONSTEXPR bool LosslessConvertibleToInt () const {
256258 return absl::visit (internal::LosslessConvertibleToIntVisitor (), value_);
257259 }
258260
259261 // For key lookups, check if the conversion to unsigned int is lossless.
260- constexpr bool LosslessConvertibleToUint () const {
262+ CEL_ABSL_VISIT_CONSTEXPR bool LosslessConvertibleToUint () const {
261263 return absl::visit (internal::LosslessConvertibleToUintVisitor (), value_);
262264 }
263265
264- constexpr bool operator <(CelNumber other) const {
266+ CEL_ABSL_VISIT_CONSTEXPR bool operator <(CelNumber other) const {
265267 return Compare (other) == internal::ComparisonResult::kLesser ;
266268 }
267269
268- constexpr bool operator <=(CelNumber other) const {
270+ CEL_ABSL_VISIT_CONSTEXPR bool operator <=(CelNumber other) const {
269271 internal::ComparisonResult cmp = Compare (other);
270272 return cmp != internal::ComparisonResult::kGreater &&
271273 cmp != internal::ComparisonResult::kNanInequal ;
272274 }
273275
274- constexpr bool operator >(CelNumber other) const {
276+ CEL_ABSL_VISIT_CONSTEXPR bool operator >(CelNumber other) const {
275277 return Compare (other) == internal::ComparisonResult::kGreater ;
276278 }
277279
278- constexpr bool operator >=(CelNumber other) const {
280+ CEL_ABSL_VISIT_CONSTEXPR bool operator >=(CelNumber other) const {
279281 internal::ComparisonResult cmp = Compare (other);
280282 return cmp != internal::ComparisonResult::kLesser &&
281283 cmp != internal::ComparisonResult::kNanInequal ;
282284 }
283285
284- constexpr bool operator ==(CelNumber other) const {
286+ CEL_ABSL_VISIT_CONSTEXPR bool operator ==(CelNumber other) const {
285287 return Compare (other) == internal::ComparisonResult::kEqual ;
286288 }
287289
288- constexpr bool operator !=(CelNumber other) const {
290+ CEL_ABSL_VISIT_CONSTEXPR bool operator !=(CelNumber other) const {
289291 return Compare (other) != internal::ComparisonResult::kEqual ;
290292 }
291293
292294 private:
293295 internal::NumberVariant value_;
294296
295- constexpr internal::ComparisonResult Compare (CelNumber other) const {
297+ CEL_ABSL_VISIT_CONSTEXPR internal::ComparisonResult Compare (
298+ CelNumber other) const {
296299 return absl::visit (internal::CompareVisitor (other.value_ ), value_);
297300 }
298301};
0 commit comments