diff options
author | Ryohei Machida <machida_mn@complex.ist.hokudai.ac.jp> | 2018-12-27 16:33:30 (GMT) |
---|---|---|
committer | Gennadiy Civil <misterg@google.com> | 2018-12-27 20:31:14 (GMT) |
commit | 6729a1361150131bc5d394d5cd2b4cdf0953ee7b (patch) | |
tree | bee3d2ae69fd5406d480adbcd827804b87fdf2b3 | |
parent | 77004096e8507c945b865236a3828f25d314c657 (diff) | |
download | googletest-6729a1361150131bc5d394d5cd2b4cdf0953ee7b.zip googletest-6729a1361150131bc5d394d5cd2b4cdf0953ee7b.tar.gz googletest-6729a1361150131bc5d394d5cd2b4cdf0953ee7b.tar.bz2 |
Merge #2002
PiperOrigin-RevId: 227030722
-rw-r--r-- | googletest/include/gtest/internal/gtest-internal.h | 31 | ||||
-rw-r--r-- | googletest/test/googletest-printers-test.cc | 6 |
2 files changed, 15 insertions, 22 deletions
diff --git a/googletest/include/gtest/internal/gtest-internal.h b/googletest/include/gtest/internal/gtest-internal.h index b32237a..f66a5c1 100644 --- a/googletest/include/gtest/internal/gtest-internal.h +++ b/googletest/include/gtest/internal/gtest-internal.h @@ -967,37 +967,24 @@ 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 = HasValueType<C>::value> + bool = sizeof(IsContainerTest<C>(0)) == sizeof(IsContainer)> struct IsRecursiveContainerImpl; -template <typename C, bool HV> -struct IsRecursiveContainerImpl<C, false, HV> : public false_type {}; +template <typename C> +struct IsRecursiveContainerImpl<C, false> : 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, false> : public false_type {}; - -template <typename C> -struct IsRecursiveContainerImpl<C, true, true> { - typedef typename IteratorTraits<typename C::const_iterator>::value_type - value_type; - typedef is_same<value_type, C> type; +struct IsRecursiveContainerImpl<C, true> { + using value_type = decltype(*std::declval<typename C::const_iterator>()); + using type = + is_same<typename std::remove_const< + typename std::remove_reference<value_type>::type>::type, + C>; }; // IsRecursiveContainer<Type> is a unary compile-time predicate that diff --git a/googletest/test/googletest-printers-test.cc b/googletest/test/googletest-printers-test.cc index 139b3e4..961e818 100644 --- a/googletest/test/googletest-printers-test.cc +++ b/googletest/test/googletest-printers-test.cc @@ -183,8 +183,14 @@ class PathLike { public: struct iterator { typedef PathLike value_type; + + iterator& operator++(); + PathLike& operator*(); }; + using value_type = char; + using const_iterator = iterator; + PathLike() {} iterator begin() const { return iterator(); } |