Index: llvm/trunk/utils/unittest/googlemock/include/gmock/gmock-matchers.h =================================================================== --- llvm/trunk/utils/unittest/googlemock/include/gmock/gmock-matchers.h +++ llvm/trunk/utils/unittest/googlemock/include/gmock/gmock-matchers.h @@ -2462,11 +2462,14 @@ template class Impl : public MatcherInterface { public: - typedef internal::StlContainerView< - GTEST_REMOVE_REFERENCE_AND_CONST_(Container)> ContainerView; + typedef GTEST_REMOVE_REFERENCE_AND_CONST_(Container) RawContainer; + typedef internal::StlContainerView View; + typedef typename View::type StlContainer; + typedef typename View::const_reference StlContainerReference; + typedef decltype(std::begin( + std::declval())) StlContainerConstIterator; typedef typename std::iterator_traits< - typename ContainerView::type::const_iterator>::difference_type - DistanceType; + StlContainerConstIterator>::difference_type DistanceType; explicit Impl(const DistanceMatcher& distance_matcher) : distance_matcher_(MatcherCast(distance_matcher)) {} @@ -3111,7 +3114,10 @@ typedef internal::StlContainerView View; typedef typename View::type StlContainer; typedef typename View::const_reference StlContainerReference; - typedef typename StlContainer::value_type Element; + typedef decltype(std::begin( + std::declval())) StlContainerConstIterator; + typedef typename std::remove_reference())>::type Element; // Constructs the matcher from a sequence of element values or // element matchers. @@ -3168,7 +3174,7 @@ // explanations[i] is the explanation of the element at index i. ::std::vector explanations(count()); StlContainerReference stl_container = View::ConstReference(container); - typename StlContainer::const_iterator it = stl_container.begin(); + StlContainerConstIterator it = stl_container.begin(); size_t exam_pos = 0; bool mismatch_found = false; // Have we found a mismatched element yet? @@ -3350,8 +3356,10 @@ typedef internal::StlContainerView View; typedef typename View::type StlContainer; typedef typename View::const_reference StlContainerReference; - typedef typename StlContainer::const_iterator StlContainerConstIterator; - typedef typename StlContainer::value_type Element; + typedef decltype(std::begin( + std::declval())) StlContainerConstIterator; + typedef typename std::remove_reference())>::type Element; // Constructs the matcher from a sequence of element values or // element matchers. @@ -3456,8 +3464,12 @@ template operator Matcher() const { typedef GTEST_REMOVE_REFERENCE_AND_CONST_(Container) RawContainer; - typedef typename internal::StlContainerView::type View; - typedef typename View::value_type Element; + typedef internal::StlContainerView View; + typedef typename View::const_reference StlContainerReference; + typedef decltype(std::begin( + std::declval())) StlContainerConstIterator; + typedef typename std::remove_reference())>::type Element; typedef ::std::vector > MatcherVec; MatcherVec matchers; matchers.reserve(::testing::tuple_size::value); @@ -3481,8 +3493,12 @@ template operator Matcher() const { typedef GTEST_REMOVE_REFERENCE_AND_CONST_(Container) RawContainer; - typedef typename internal::StlContainerView::type View; - typedef typename View::value_type Element; + typedef internal::StlContainerView View; + typedef typename View::const_reference StlContainerReference; + typedef decltype(std::begin( + std::declval())) StlContainerConstIterator; + typedef typename std::remove_reference())>::type Element; typedef ::std::vector > MatcherVec; MatcherVec matchers; matchers.reserve(::testing::tuple_size::value);