| // Part of the Crubit project, under the Apache License v2.0 with LLVM | |
| // Exceptions. See /LICENSE for license information. | |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
| struct string; | |
| // The definitions below model assorted definitions in Abseil's logging library. | |
| // `something` is chosen to indicate that we don't want to depend on the details | |
| // of which particular namespace the real implementations reside in. They need | |
| // only be somewhere in `absl`. | |
| namespace absl::something { | |
| template <typename T> | |
| const T &GetReferenceableValue(const T &); | |
| template <typename T1, typename T2> | |
| string *Check_NEImpl(const T1 &, const T2 &, const char *); | |
| class LogMessageFatal { | |
| public: | |
| LogMessageFatal(); | |
| [[noreturn]] ~LogMessageFatal(); | |
| LogMessageFatal &InternalStream(); | |
| }; | |
| } // namespace absl::something | |
| #define CHECK_OP(name, op, a, b) \ | |
| while (string *result = ::absl::something::name##Impl( \ | |
| ::absl::something::GetReferenceableValue(a), \ | |
| ::absl::something::GetReferenceableValue(b), "msg")) \ | |
| ::absl::something::LogMessageFatal().InternalStream() | |
| #define CHECK_NE(a, b) CHECK_OP(Check_NE, !=, (a), (b)) |