diff --git a/googlemock/include/gmock/gmock-matchers.h b/googlemock/include/gmock/gmock-matchers.h index 14696bc02..5f5855f36 100644 --- a/googlemock/include/gmock/gmock-matchers.h +++ b/googlemock/include/gmock/gmock-matchers.h @@ -4150,7 +4150,8 @@ class [[nodiscard]] UnorderedElementsAreMatcher { template operator Matcher() const { typedef GTEST_REMOVE_REFERENCE_AND_CONST_(Container) RawContainer; - typedef typename internal::RangeTraits::value_type Element; + typedef typename internal::StlContainerView::type View; + typedef typename internal::RangeTraits::value_type Element; typedef ::std::vector> MatcherVec; MatcherVec matchers; matchers.reserve(::std::tuple_size::value); diff --git a/googlemock/test/gmock-matchers-containers_test.cc b/googlemock/test/gmock-matchers-containers_test.cc index e7969a0cc..bf3ec17ed 100644 --- a/googlemock/test/gmock-matchers-containers_test.cc +++ b/googlemock/test/gmock-matchers-containers_test.cc @@ -2288,6 +2288,13 @@ TEST_F(UnorderedElementsAreTest, WorksWithUncopyable) { UnorderedElementsAre(Truly(ValueIsPositive), UncopyableIs(-3))); } +TEST_F(UnorderedElementsAreTest, WorksWithNativeArrayPassedAsPointerAndSize) { + int array[] = {0, 1}; + ::std::tuple array_as_tuple(array, 2); + EXPECT_THAT(array_as_tuple, UnorderedElementsAre(1, 0)); + EXPECT_THAT(array_as_tuple, Not(UnorderedElementsAre(0))); +} + TEST_F(UnorderedElementsAreTest, SucceedsWhenExpected) { const int a[] = {1, 2, 3}; std::vector s(std::begin(a), std::end(a));