Merge pull request #2426 from kuzkry:#2396-postreview
PiperOrigin-RevId: 265785837
This commit is contained in:
		@@ -133,14 +133,14 @@ class MatcherCastImpl {
 | 
				
			|||||||
    // a user-defined conversion from M to T if one exists (assuming M is
 | 
					    // a user-defined conversion from M to T if one exists (assuming M is
 | 
				
			||||||
    // a value).
 | 
					    // a value).
 | 
				
			||||||
    return CastImpl(polymorphic_matcher_or_value,
 | 
					    return CastImpl(polymorphic_matcher_or_value,
 | 
				
			||||||
                    bool_constant<std::is_convertible<M, Matcher<T>>::value>(),
 | 
					                    std::is_convertible<M, Matcher<T>>{},
 | 
				
			||||||
                    bool_constant<std::is_convertible<M, T>::value>());
 | 
					                    std::is_convertible<M, T>{});
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 private:
 | 
					 private:
 | 
				
			||||||
  template <bool Ignore>
 | 
					  template <bool Ignore>
 | 
				
			||||||
  static Matcher<T> CastImpl(const M& polymorphic_matcher_or_value,
 | 
					  static Matcher<T> CastImpl(const M& polymorphic_matcher_or_value,
 | 
				
			||||||
                             bool_constant<true> /* convertible_to_matcher */,
 | 
					                             std::true_type /* convertible_to_matcher */,
 | 
				
			||||||
                             bool_constant<Ignore>) {
 | 
					                             bool_constant<Ignore>) {
 | 
				
			||||||
    // M is implicitly convertible to Matcher<T>, which means that either
 | 
					    // M is implicitly convertible to Matcher<T>, which means that either
 | 
				
			||||||
    // M is a polymorphic matcher or Matcher<T> has an implicit constructor
 | 
					    // M is a polymorphic matcher or Matcher<T> has an implicit constructor
 | 
				
			||||||
@@ -157,8 +157,8 @@ class MatcherCastImpl {
 | 
				
			|||||||
  // matcher. It's a value of a type implicitly convertible to T. Use direct
 | 
					  // matcher. It's a value of a type implicitly convertible to T. Use direct
 | 
				
			||||||
  // initialization to create a matcher.
 | 
					  // initialization to create a matcher.
 | 
				
			||||||
  static Matcher<T> CastImpl(const M& value,
 | 
					  static Matcher<T> CastImpl(const M& value,
 | 
				
			||||||
                             bool_constant<false> /* convertible_to_matcher */,
 | 
					                             std::false_type /* convertible_to_matcher */,
 | 
				
			||||||
                             bool_constant<true> /* convertible_to_T */) {
 | 
					                             std::true_type /* convertible_to_T */) {
 | 
				
			||||||
    return Matcher<T>(ImplicitCast_<T>(value));
 | 
					    return Matcher<T>(ImplicitCast_<T>(value));
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -173,8 +173,8 @@ class MatcherCastImpl {
 | 
				
			|||||||
  //
 | 
					  //
 | 
				
			||||||
  // We don't define this method inline as we need the declaration of Eq().
 | 
					  // We don't define this method inline as we need the declaration of Eq().
 | 
				
			||||||
  static Matcher<T> CastImpl(const M& value,
 | 
					  static Matcher<T> CastImpl(const M& value,
 | 
				
			||||||
                             bool_constant<false> /* convertible_to_matcher */,
 | 
					                             std::false_type /* convertible_to_matcher */,
 | 
				
			||||||
                             bool_constant<false> /* convertible_to_T */);
 | 
					                             std::false_type /* convertible_to_T */);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// This more specialized version is used when MatcherCast()'s argument
 | 
					// This more specialized version is used when MatcherCast()'s argument
 | 
				
			||||||
@@ -3600,8 +3600,8 @@ inline Matcher<T> An() { return A<T>(); }
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
template <typename T, typename M>
 | 
					template <typename T, typename M>
 | 
				
			||||||
Matcher<T> internal::MatcherCastImpl<T, M>::CastImpl(
 | 
					Matcher<T> internal::MatcherCastImpl<T, M>::CastImpl(
 | 
				
			||||||
    const M& value, internal::bool_constant<false> /* convertible_to_matcher */,
 | 
					    const M& value, std::false_type /* convertible_to_matcher */,
 | 
				
			||||||
    internal::bool_constant<false> /* convertible_to_T */) {
 | 
					    std::false_type /* convertible_to_T */) {
 | 
				
			||||||
  return Eq(value);
 | 
					  return Eq(value);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user