diff options
author | Douglas Gregor <dgregor@apple.com> | 2009-09-04 14:46:39 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2009-09-04 14:46:39 +0000 |
commit | d93bacf13bda3055a51a1160bca5e8d851d67eb7 (patch) | |
tree | fe6bdccb4ccdf42d63e314ee6aead64fcdaee1f5 | |
parent | 45f965581935791a018df829a14dff53c1dd8f47 (diff) |
When searching for a default constructor or copy constructor, skip constructor templates
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@81002 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/AST/DeclCXX.cpp | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/lib/AST/DeclCXX.cpp b/lib/AST/DeclCXX.cpp index 29a7c7fad9..155005a100 100644 --- a/lib/AST/DeclCXX.cpp +++ b/lib/AST/DeclCXX.cpp @@ -157,6 +157,11 @@ CXXConstructorDecl *CXXRecordDecl::getCopyConstructor(ASTContext &Context, DeclContext::lookup_const_iterator Con, ConEnd; for (llvm::tie(Con, ConEnd) = this->lookup(ConstructorName); Con != ConEnd; ++Con) { + // C++ [class.copy]p2: + // A non-template constructor for class X is a copy constructor if [...] + if (isa<FunctionTemplateDecl>(*Con)) + continue; + if (cast<CXXConstructorDecl>(*Con)->isCopyConstructor(Context, FoundTQs)) { if (((TypeQuals & QualType::Const) == (FoundTQs & QualType::Const)) || @@ -301,6 +306,10 @@ CXXRecordDecl::getDefaultConstructor(ASTContext &Context) { DeclContext::lookup_const_iterator Con, ConEnd; for (llvm::tie(Con, ConEnd) = lookup(ConstructorName); Con != ConEnd; ++Con) { + // FIXME: In C++0x, a constructor template can be a default constructor. + if (isa<FunctionTemplateDecl>(*Con)) + continue; + CXXConstructorDecl *Constructor = cast<CXXConstructorDecl>(*Con); if (Constructor->isDefaultConstructor()) return Constructor; |