diff options
author | Douglas Gregor <dgregor@apple.com> | 2012-04-06 22:40:38 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2012-04-06 22:40:38 +0000 |
commit | d2008e2c80d6c9282044ec873a937a17a0f33579 (patch) | |
tree | d3e119b536c83e6fd769fa31a3abac02892a2aed /lib/Sema/SemaTemplateDeduction.cpp | |
parent | e35abe1fd3f867ae51d5c68d98578d537eb6beca (diff) |
Implement support for null non-type template arguments for non-type
template parameters of pointer, pointer-to-member, or nullptr_t
type in C++11. Fixes PR9700 / <rdar://problem/11193097>.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@154219 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaTemplateDeduction.cpp')
-rw-r--r-- | lib/Sema/SemaTemplateDeduction.cpp | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/lib/Sema/SemaTemplateDeduction.cpp b/lib/Sema/SemaTemplateDeduction.cpp index b448633381..2ea1e6ff93 100644 --- a/lib/Sema/SemaTemplateDeduction.cpp +++ b/lib/Sema/SemaTemplateDeduction.cpp @@ -1586,8 +1586,7 @@ DeduceTemplateArguments(Sema &S, case TemplateArgument::Declaration: if (Arg.getKind() == TemplateArgument::Declaration && - Param.getAsDecl()->getCanonicalDecl() == - Arg.getAsDecl()->getCanonicalDecl()) + isSameDeclaration(Param.getAsDecl(), Arg.getAsDecl())) return Sema::TDK_Success; Info.FirstArg = Param; @@ -1858,8 +1857,7 @@ static bool isSameTemplateArg(ASTContext &Context, Context.getCanonicalType(Y.getAsType()); case TemplateArgument::Declaration: - return X.getAsDecl()->getCanonicalDecl() == - Y.getAsDecl()->getCanonicalDecl(); + return isSameDeclaration(X.getAsDecl(), Y.getAsDecl()); case TemplateArgument::Template: case TemplateArgument::TemplateExpansion: @@ -1925,7 +1923,7 @@ getTrivialTemplateArgumentLoc(Sema &S, case TemplateArgument::Declaration: { Expr *E = S.BuildExpressionFromDeclTemplateArgument(Arg, NTTPType, Loc) - .takeAs<Expr>(); + .takeAs<Expr>(); return TemplateArgumentLoc(TemplateArgument(E), E); } @@ -4410,7 +4408,7 @@ MarkUsedTemplateParameters(ASTContext &Ctx, switch (TemplateArg.getKind()) { case TemplateArgument::Null: case TemplateArgument::Integral: - case TemplateArgument::Declaration: + case TemplateArgument::Declaration: break; case TemplateArgument::Type: |