diff options
author | Derek Mauro <dmauro@google.com> | 2018-07-12 17:46:50 (GMT) |
---|---|---|
committer | Derek Mauro <dmauro@google.com> | 2018-07-12 17:46:50 (GMT) |
commit | 6c7878a151f05d64f675b800b054c5fc43f3dd6d (patch) | |
tree | 4b73b4e6ed35633bb67b8bbd4e6f78fb1d248eb9 /googletest | |
parent | 41f0e24335d8874cc87420a6349bb1844e2a15de (diff) | |
download | googletest-6c7878a151f05d64f675b800b054c5fc43f3dd6d.zip googletest-6c7878a151f05d64f675b800b054c5fc43f3dd6d.tar.gz googletest-6c7878a151f05d64f675b800b054c5fc43f3dd6d.tar.bz2 |
Adds the UniversalPrinter for absl::variant.refs/pull/1662/head
Diffstat (limited to 'googletest')
-rw-r--r-- | googletest/include/gtest/gtest-printers.h | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/googletest/include/gtest/gtest-printers.h b/googletest/include/gtest/gtest-printers.h index 373946b..66d54b9 100644 --- a/googletest/include/gtest/gtest-printers.h +++ b/googletest/include/gtest/gtest-printers.h @@ -114,6 +114,7 @@ #if GTEST_HAS_ABSL #include "absl/strings/string_view.h" #include "absl/types/optional.h" +#include "absl/types/variant.h" #endif // GTEST_HAS_ABSL namespace testing { @@ -787,6 +788,28 @@ class UniversalPrinter<::absl::optional<T>> { } }; +// Printer for absl::variant + +template <typename... T> +class UniversalPrinter<::absl::variant<T...>> { + public: + static void Print(const ::absl::variant<T...>& value, ::std::ostream* os) { + *os << '('; + absl::visit(Visitor{os}, value); + *os << ')'; + } + + private: + struct Visitor { + template <typename U> + void operator()(const U& u) const { + *os << "'" << GetTypeName<U>() << "' with value "; + UniversalPrint(u, os); + } + ::std::ostream* os; + }; +}; + #endif // GTEST_HAS_ABSL // UniversalPrintArray(begin, len, os) prints an array of 'len' |