From 3d71ab4c37de5f13da905a4b60c127176160537d Mon Sep 17 00:00:00 2001 From: Abseil Team Date: Mon, 3 Dec 2018 14:55:34 -0500 Subject: Googletest export Deduce SizeType for SizeIs() from the return value of the size() member function PiperOrigin-RevId: 223835674 --- googlemock/include/gmock/gmock-matchers.h | 4 +--- googlemock/test/gmock-matchers_test.cc | 11 +++++++++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/googlemock/include/gmock/gmock-matchers.h b/googlemock/include/gmock/gmock-matchers.h index 801c8df..b859f1a 100644 --- a/googlemock/include/gmock/gmock-matchers.h +++ b/googlemock/include/gmock/gmock-matchers.h @@ -1955,9 +1955,7 @@ class SizeIsMatcher { template class Impl : public MatcherInterface { public: - typedef internal::StlContainerView< - GTEST_REMOVE_REFERENCE_AND_CONST_(Container)> ContainerView; - typedef typename ContainerView::type::size_type SizeType; + using SizeType = decltype(std::declval().size()); explicit Impl(const SizeMatcher& size_matcher) : size_matcher_(MatcherCast(size_matcher)) {} diff --git a/googlemock/test/gmock-matchers_test.cc b/googlemock/test/gmock-matchers_test.cc index 5dc09f3..dd4931b 100644 --- a/googlemock/test/gmock-matchers_test.cc +++ b/googlemock/test/gmock-matchers_test.cc @@ -4821,6 +4821,17 @@ TEST(SizeIsTest, WorksWithReferences) { EXPECT_THAT(container, m); } +// SizeIs should work for any type that provides a size() member function. +// For example, a size_type member type should not need to be provided. +struct MinimalistCustomType { + int size() const { return 1; } +}; +TEST(SizeIsTest, WorksWithMinimalistCustomType) { + MinimalistCustomType container; + EXPECT_THAT(container, SizeIs(1)); + EXPECT_THAT(container, Not(SizeIs(0))); +} + TEST(SizeIsTest, CanDescribeSelf) { Matcher > m = SizeIs(2); EXPECT_EQ("size is equal to 2", Describe(m)); -- cgit v0.12