|
|
|
@ -1610,8 +1610,9 @@ class PointeeMatcher { |
|
|
|
|
template <typename Pointer> |
|
|
|
|
class Impl : public MatcherInterface<Pointer> { |
|
|
|
|
public: |
|
|
|
|
typedef typename PointeeOf<GTEST_REMOVE_CONST_( // NOLINT
|
|
|
|
|
GTEST_REMOVE_REFERENCE_(Pointer))>::type Pointee; |
|
|
|
|
typedef |
|
|
|
|
typename PointeeOf<typename std::remove_const<GTEST_REMOVE_REFERENCE_( |
|
|
|
|
Pointer)>::type>::type Pointee; |
|
|
|
|
|
|
|
|
|
explicit Impl(const InnerMatcher& matcher) |
|
|
|
|
: matcher_(MatcherCast<const Pointee&>(matcher)) {} |
|
|
|
@ -1749,8 +1750,8 @@ class FieldMatcher { |
|
|
|
|
// FIXME: The dispatch on std::is_pointer was introduced as a workaround for
|
|
|
|
|
// a compiler bug, and can now be removed.
|
|
|
|
|
return MatchAndExplainImpl( |
|
|
|
|
typename std::is_pointer<GTEST_REMOVE_CONST_(T)>::type(), value, |
|
|
|
|
listener); |
|
|
|
|
typename std::is_pointer<typename std::remove_const<T>::type>::type(), |
|
|
|
|
value, listener); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private: |
|
|
|
@ -1816,8 +1817,8 @@ class PropertyMatcher { |
|
|
|
|
template <typename T> |
|
|
|
|
bool MatchAndExplain(const T&value, MatchResultListener* listener) const { |
|
|
|
|
return MatchAndExplainImpl( |
|
|
|
|
typename std::is_pointer<GTEST_REMOVE_CONST_(T)>::type(), value, |
|
|
|
|
listener); |
|
|
|
|
typename std::is_pointer<typename std::remove_const<T>::type>::type(), |
|
|
|
|
value, listener); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private: |
|
|
|
@ -2093,9 +2094,8 @@ class ContainerEqMatcher { |
|
|
|
|
template <typename LhsContainer> |
|
|
|
|
bool MatchAndExplain(const LhsContainer& lhs, |
|
|
|
|
MatchResultListener* listener) const { |
|
|
|
|
// GTEST_REMOVE_CONST_() is needed to work around an MSVC 8.0 bug
|
|
|
|
|
// that causes LhsContainer to be a const type sometimes.
|
|
|
|
|
typedef internal::StlContainerView<GTEST_REMOVE_CONST_(LhsContainer)> |
|
|
|
|
typedef internal::StlContainerView< |
|
|
|
|
typename std::remove_const<LhsContainer>::type> |
|
|
|
|
LhsView; |
|
|
|
|
typedef typename LhsView::type LhsStlContainer; |
|
|
|
|
StlContainerReference lhs_stl_container = LhsView::ConstReference(lhs); |
|
|
|
@ -4034,12 +4034,12 @@ BeginEndDistanceIs(const DistanceMatcher& distance_matcher) { |
|
|
|
|
// values that are included in one container but not the other. (Duplicate
|
|
|
|
|
// values and order differences are not explained.)
|
|
|
|
|
template <typename Container> |
|
|
|
|
inline PolymorphicMatcher<internal::ContainerEqMatcher< // NOLINT
|
|
|
|
|
GTEST_REMOVE_CONST_(Container)> > |
|
|
|
|
ContainerEq(const Container& rhs) { |
|
|
|
|
inline PolymorphicMatcher<internal::ContainerEqMatcher< |
|
|
|
|
typename std::remove_const<Container>::type>> |
|
|
|
|
ContainerEq(const Container& rhs) { |
|
|
|
|
// This following line is for working around a bug in MSVC 8.0,
|
|
|
|
|
// which causes Container to be a const type sometimes.
|
|
|
|
|
typedef GTEST_REMOVE_CONST_(Container) RawContainer; |
|
|
|
|
typedef typename std::remove_const<Container>::type RawContainer; |
|
|
|
|
return MakePolymorphicMatcher( |
|
|
|
|
internal::ContainerEqMatcher<RawContainer>(rhs)); |
|
|
|
|
} |
|
|
|
@ -4072,12 +4072,12 @@ WhenSorted(const ContainerMatcher& container_matcher) { |
|
|
|
|
// LHS container and the RHS container respectively.
|
|
|
|
|
template <typename TupleMatcher, typename Container> |
|
|
|
|
inline internal::PointwiseMatcher<TupleMatcher, |
|
|
|
|
GTEST_REMOVE_CONST_(Container)> |
|
|
|
|
typename std::remove_const<Container>::type> |
|
|
|
|
Pointwise(const TupleMatcher& tuple_matcher, const Container& rhs) { |
|
|
|
|
// This following line is for working around a bug in MSVC 8.0,
|
|
|
|
|
// which causes Container to be a const type sometimes (e.g. when
|
|
|
|
|
// rhs is a const int[])..
|
|
|
|
|
typedef GTEST_REMOVE_CONST_(Container) RawContainer; |
|
|
|
|
typedef typename std::remove_const<Container>::type RawContainer; |
|
|
|
|
return internal::PointwiseMatcher<TupleMatcher, RawContainer>( |
|
|
|
|
tuple_matcher, rhs); |
|
|
|
|
} |
|
|
|
@ -4105,14 +4105,15 @@ inline internal::PointwiseMatcher<TupleMatcher, std::vector<T> > Pointwise( |
|
|
|
|
template <typename Tuple2Matcher, typename RhsContainer> |
|
|
|
|
inline internal::UnorderedElementsAreArrayMatcher< |
|
|
|
|
typename internal::BoundSecondMatcher< |
|
|
|
|
Tuple2Matcher, typename internal::StlContainerView<GTEST_REMOVE_CONST_( |
|
|
|
|
RhsContainer)>::type::value_type> > |
|
|
|
|
Tuple2Matcher, |
|
|
|
|
typename internal::StlContainerView< |
|
|
|
|
typename std::remove_const<RhsContainer>::type>::type::value_type>> |
|
|
|
|
UnorderedPointwise(const Tuple2Matcher& tuple2_matcher, |
|
|
|
|
const RhsContainer& rhs_container) { |
|
|
|
|
// This following line is for working around a bug in MSVC 8.0,
|
|
|
|
|
// which causes RhsContainer to be a const type sometimes (e.g. when
|
|
|
|
|
// rhs_container is a const int[]).
|
|
|
|
|
typedef GTEST_REMOVE_CONST_(RhsContainer) RawRhsContainer; |
|
|
|
|
typedef typename std::remove_const<RhsContainer>::type RawRhsContainer; |
|
|
|
|
|
|
|
|
|
// RhsView allows the same code to handle RhsContainer being a
|
|
|
|
|
// STL-style container and it being a native C-style array.
|
|
|
|
|