diff options
-rw-r--r-- | lib/Sema/SemaTemplateDeduction.cpp | 3 | ||||
-rw-r--r-- | test/SemaObjCXX/deduction.mm | 7 |
2 files changed, 9 insertions, 1 deletions
diff --git a/lib/Sema/SemaTemplateDeduction.cpp b/lib/Sema/SemaTemplateDeduction.cpp index 885cb06dca..3f54bbe433 100644 --- a/lib/Sema/SemaTemplateDeduction.cpp +++ b/lib/Sema/SemaTemplateDeduction.cpp @@ -1721,7 +1721,8 @@ Sema::DeduceTemplateArguments(FunctionTemplateDecl *FunctionTemplate, // - The transformed A can be another pointer or pointer to member // type that can be converted to the deduced A via a qualification // conversion (4.4). - if (ArgType->isPointerType() || ArgType->isMemberPointerType()) + if (ArgType->isPointerType() || ArgType->isMemberPointerType() || + ArgType->isObjCObjectPointerType()) TDF |= TDF_IgnoreQualifiers; // - If P is a class and P has the form simple-template-id, then the // transformed A can be a derived class of the deduced A. Likewise, diff --git a/test/SemaObjCXX/deduction.mm b/test/SemaObjCXX/deduction.mm index 6dd449d6ea..220f36863b 100644 --- a/test/SemaObjCXX/deduction.mm +++ b/test/SemaObjCXX/deduction.mm @@ -56,3 +56,10 @@ namespace test1 { template struct tester<Test1Class>; // expected-note {{in instantiation}} template struct tester<Test1Class<Test1Protocol> >; // expected-note {{in instantiation}} } + +namespace test2 { + template <typename T> void foo(const T* t) {} + void test(id x) { + foo(x); + } +} |