@@ -2920,26 +2920,27 @@ class EachMatcher {
2920
2920
const M inner_matcher_;
2921
2921
};
2922
2922
2923
- struct Rank1 {};
2924
- struct Rank0 : Rank1 {};
2923
+ // Use go/ranked-overloads for dispatching.
2924
+ struct Rank0 {};
2925
+ struct Rank1 : Rank0 {};
2925
2926
2926
2927
namespace pair_getters {
2927
2928
using std::get;
2928
2929
template <typename T>
2929
- auto First (T& x, Rank1 ) -> decltype(get<0 >(x)) { // NOLINT
2930
+ auto First (T& x, Rank0 ) -> decltype(get<0 >(x)) { // NOLINT
2930
2931
return get<0 >(x);
2931
2932
}
2932
2933
template <typename T>
2933
- auto First (T& x, Rank0 ) -> decltype((x.first)) { // NOLINT
2934
+ auto First (T& x, Rank1 ) -> decltype((x.first)) { // NOLINT
2934
2935
return x.first ;
2935
2936
}
2936
2937
2937
2938
template <typename T>
2938
- auto Second (T& x, Rank1 ) -> decltype(get<1 >(x)) { // NOLINT
2939
+ auto Second (T& x, Rank0 ) -> decltype(get<1 >(x)) { // NOLINT
2939
2940
return get<1 >(x);
2940
2941
}
2941
2942
template <typename T>
2942
- auto Second (T& x, Rank0 ) -> decltype((x.second)) { // NOLINT
2943
+ auto Second (T& x, Rank1 ) -> decltype((x.second)) { // NOLINT
2943
2944
return x.second ;
2944
2945
}
2945
2946
} // namespace pair_getters
@@ -2965,7 +2966,7 @@ class KeyMatcherImpl : public MatcherInterface<PairType> {
2965
2966
MatchResultListener* listener) const override {
2966
2967
StringMatchResultListener inner_listener;
2967
2968
const bool match = inner_matcher_.MatchAndExplain (
2968
- pair_getters::First (key_value, Rank0 ()), &inner_listener);
2969
+ pair_getters::First (key_value, Rank1 ()), &inner_listener);
2969
2970
const std::string explanation = inner_listener.str ();
2970
2971
if (!explanation.empty ()) {
2971
2972
*listener << " whose first field is a value " << explanation;
@@ -3087,18 +3088,18 @@ class PairMatcherImpl : public MatcherInterface<PairType> {
3087
3088
if (!listener->IsInterested ()) {
3088
3089
// If the listener is not interested, we don't need to construct the
3089
3090
// explanation.
3090
- return first_matcher_.Matches (pair_getters::First (a_pair, Rank0 ())) &&
3091
- second_matcher_.Matches (pair_getters::Second (a_pair, Rank0 ()));
3091
+ return first_matcher_.Matches (pair_getters::First (a_pair, Rank1 ())) &&
3092
+ second_matcher_.Matches (pair_getters::Second (a_pair, Rank1 ()));
3092
3093
}
3093
3094
StringMatchResultListener first_inner_listener;
3094
- if (!first_matcher_.MatchAndExplain (pair_getters::First (a_pair, Rank0 ()),
3095
+ if (!first_matcher_.MatchAndExplain (pair_getters::First (a_pair, Rank1 ()),
3095
3096
&first_inner_listener)) {
3096
3097
*listener << " whose first field does not match" ;
3097
3098
PrintIfNotEmpty (first_inner_listener.str (), listener->stream ());
3098
3099
return false ;
3099
3100
}
3100
3101
StringMatchResultListener second_inner_listener;
3101
- if (!second_matcher_.MatchAndExplain (pair_getters::Second (a_pair, Rank0 ()),
3102
+ if (!second_matcher_.MatchAndExplain (pair_getters::Second (a_pair, Rank1 ()),
3102
3103
&second_inner_listener)) {
3103
3104
*listener << " whose second field does not match" ;
3104
3105
PrintIfNotEmpty (second_inner_listener.str (), listener->stream ());
0 commit comments