summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGennadiy Civil <misterg@google.com>2018-03-16 15:56:31 -0400
committerGennadiy Civil <misterg@google.com>2018-03-16 15:56:31 -0400
commita3c2e107aeb7e821b76164cea366094ce420b656 (patch)
tree06bf0481d2b505b2adb4aaa0ccf246fded7d5af3
parent080fcbe0aae28dec00c2903ea04f2d2b022deb12 (diff)
downloadgoogletest-a3c2e107aeb7e821b76164cea366094ce420b656.tar.gz
googletest-a3c2e107aeb7e821b76164cea366094ce420b656.zip
cl 189032107, again
-rw-r--r--googletest/include/gtest/internal/gtest-internal.h23
-rw-r--r--googletest/test/gtest-printers_test.cc1
2 files changed, 19 insertions, 5 deletions
diff --git a/googletest/include/gtest/internal/gtest-internal.h b/googletest/include/gtest/internal/gtest-internal.h
index 6e904a82..ffc22f92 100644
--- a/googletest/include/gtest/internal/gtest-internal.h
+++ b/googletest/include/gtest/internal/gtest-internal.h
@@ -933,19 +933,34 @@ struct IsHashTable {
template <typename T>
const bool IsHashTable<T>::value;
+template<typename T>
+struct VoidT {
+ typedef void value_type;
+};
+
+template <typename T, typename = void>
+struct HasValueType : false_type {};
+template <typename T>
+struct HasValueType<T, VoidT<typename T::value_type> > : true_type {
+};
+
template <typename C,
- bool = sizeof(IsContainerTest<C>(0)) == sizeof(IsContainer)>
+ bool = sizeof(IsContainerTest<C>(0)) == sizeof(IsContainer),
+ bool = HasValueType<C>::value>
struct IsRecursiveContainerImpl;
-template <typename C>
-struct IsRecursiveContainerImpl<C, false> : public false_type {};
+template <typename C, bool HV>
+struct IsRecursiveContainerImpl<C, false, HV> : public false_type {};
// Since the IsRecursiveContainerImpl depends on the IsContainerTest we need to
// obey the same inconsistencies as the IsContainerTest, namely check if
// something is a container is relying on only const_iterator in C++11 and
// is relying on both const_iterator and iterator otherwise
template <typename C>
-struct IsRecursiveContainerImpl<C, true> {
+struct IsRecursiveContainerImpl<C, true, false> : public false_type {};
+
+template <typename C>
+struct IsRecursiveContainerImpl<C, true, true> {
#if GTEST_LANG_CXX11
typedef typename IteratorTraits<typename C::const_iterator>::value_type
value_type;
diff --git a/googletest/test/gtest-printers_test.cc b/googletest/test/gtest-printers_test.cc
index ccac35b4..4487978c 100644
--- a/googletest/test/gtest-printers_test.cc
+++ b/googletest/test/gtest-printers_test.cc
@@ -195,7 +195,6 @@ class PathLike {
struct iterator {
typedef PathLike value_type;
};
- typedef iterator const_iterator;
PathLike() {}
OpenPOWER on IntegriCloud