summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaDecl.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2011-02-04 04:20:44 +0000
committerDouglas Gregor <dgregor@apple.com>2011-02-04 04:20:44 +0000
commita99fb4c77d96f01360244edba5b87f88f68897f4 (patch)
treed8edd4966b0398ce102ad6bcc5bf3785a3982ec9 /clang/lib/Sema/SemaDecl.cpp
parent8b481d8ac2af1ac2af029d0773938d7bff364737 (diff)
downloadbcm5719-llvm-a99fb4c77d96f01360244edba5b87f88f68897f4.tar.gz
bcm5719-llvm-a99fb4c77d96f01360244edba5b87f88f68897f4.zip
Tighten up the semantics of default template arguments, per C++0x
[temp.param]p9 and C++ DR226. Fixes PR8747. llvm-svn: 124856
Diffstat (limited to 'clang/lib/Sema/SemaDecl.cpp')
-rw-r--r--clang/lib/Sema/SemaDecl.cpp10
1 files changed, 8 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index 9c4fdc99f27..88c3a770c27 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -3967,8 +3967,14 @@ Sema::ActOnFunctionDeclarator(Scope* S, Declarator& D, DeclContext* DC,
FunctionTemplateDecl *PrevTemplate = FunctionTemplate->getPreviousDeclaration();
CheckTemplateParameterList(FunctionTemplate->getTemplateParameters(),
PrevTemplate? PrevTemplate->getTemplateParameters() : 0,
- D.getDeclSpec().isFriendSpecified()? TPC_FriendFunctionTemplate
- : TPC_FunctionTemplate);
+ D.getDeclSpec().isFriendSpecified()
+ ? (IsFunctionDefinition
+ ? TPC_FriendFunctionTemplateDefinition
+ : TPC_FriendFunctionTemplate)
+ : (D.getCXXScopeSpec().isSet() &&
+ DC && DC->isRecord())
+ ? TPC_ClassTemplateMember
+ : TPC_FunctionTemplate);
}
if (NewFD->isInvalidDecl()) {
OpenPOWER on IntegriCloud