Skip to content

Commit 3609e09

Browse files
authored
[clang] member pointer class qualification fix (#142081)
This fixes a regression introduced in #130537, which was reported here: #132401 (comment) When deducing member pointers class, ignore top level qualifiers on the argument side, since the class portion of a member pointer is a nested-name-specifier, and these just nominate an entity. Qualifiers on the parameter side are fine since deduction allows the parameter side to be more qualified, and these qualifiers won't be part of the result. Since this regression was never released, there are no release notes.
1 parent 6cb087a commit 3609e09

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

clang/lib/Sema/SemaTemplateDeduction.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2127,7 +2127,7 @@ static TemplateDeductionResult DeduceTemplateArgumentsByTypeMatch(
21272127
TA = S.Context.getTypeDeclType(MPA->getMostRecentCXXRecordDecl());
21282128
} else {
21292129
NestedNameSpecifier *QA = MPA->getQualifier();
2130-
TA = QualType(QA->translateToType(S.Context), 0);
2130+
TA = QualType(QA->translateToType(S.Context), 0).getUnqualifiedType();
21312131
}
21322132
assert(!TA.isNull() && "member pointer with non-type class");
21332133
return DeduceTemplateArgumentsByTypeMatch(

clang/test/SemaCXX/member-pointer.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -408,3 +408,25 @@ namespace deduction2 {
408408
void i() { e(&C::h); }
409409
};
410410
} // namespace deduction2
411+
412+
namespace deduction_qualifiers {
413+
struct A {
414+
int v;
415+
};
416+
using CA = const A;
417+
418+
template <class T> void g(const T&, int T::*);
419+
template <class T> void h(const T&, int CA::*);
420+
421+
void test(const A a, A b) {
422+
g(a, &A::v);
423+
g(a, &CA::v);
424+
h(a, &A::v);
425+
h(a, &CA::v);
426+
427+
g(b, &A::v);
428+
g(b, &CA::v);
429+
h(b, &A::v);
430+
h(b, &CA::v);
431+
}
432+
} // namespace deduction_qualifiers

0 commit comments

Comments
 (0)