summaryrefslogtreecommitdiffstats
path: root/googletest/include
diff options
context:
space:
mode:
authorDerek Mauro <dmauro@google.com>2018-07-12 17:46:50 (GMT)
committerDerek Mauro <dmauro@google.com>2018-07-12 17:46:50 (GMT)
commit6c7878a151f05d64f675b800b054c5fc43f3dd6d (patch)
tree4b73b4e6ed35633bb67b8bbd4e6f78fb1d248eb9 /googletest/include
parent41f0e24335d8874cc87420a6349bb1844e2a15de (diff)
downloadgoogletest-6c7878a151f05d64f675b800b054c5fc43f3dd6d.zip
googletest-6c7878a151f05d64f675b800b054c5fc43f3dd6d.tar.gz
googletest-6c7878a151f05d64f675b800b054c5fc43f3dd6d.tar.bz2
Adds the UniversalPrinter for absl::variant.refs/pull/1662/head
Diffstat (limited to 'googletest/include')
-rw-r--r--googletest/include/gtest/gtest-printers.h23
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'