diff options
author | Roberto Raggi <qtc-committer@nokia.com> | 2008-12-03 11:59:11 +0100 |
---|---|---|
committer | Roberto Raggi <qtc-committer@nokia.com> | 2008-12-03 11:59:11 +0100 |
commit | e689a1739561fd629152bda981d122ef7c332a9f (patch) | |
tree | 797aa0948302804cd00c3ea57f1ba67834b7a247 /shared/cplusplus/CheckDeclaration.cpp | |
parent | 3d9945238d43336812d35687d91873354f206471 (diff) | |
download | qt-creator-e689a1739561fd629152bda981d122ef7c332a9f.tar.gz |
Check for the wrong usage of ctor initializers.
Diffstat (limited to 'shared/cplusplus/CheckDeclaration.cpp')
-rw-r--r-- | shared/cplusplus/CheckDeclaration.cpp | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/shared/cplusplus/CheckDeclaration.cpp b/shared/cplusplus/CheckDeclaration.cpp index b4c381d617..6915faf82c 100644 --- a/shared/cplusplus/CheckDeclaration.cpp +++ b/shared/cplusplus/CheckDeclaration.cpp @@ -236,13 +236,21 @@ bool CheckDeclaration::visit(FunctionDefinitionAST *ast) _scope->enterSymbol(fun); - if (ast->ctor_initializer && (ty.isValid() || (fun->identity() && ! fun->identity()->isNameId()))) { - translationUnit()->error(ast->ctor_initializer->firstToken(), - "only constructors take base initializers"); + if (ast->ctor_initializer) { + bool looksLikeCtor = false; + if (ty.isValid() || ! fun->identity()) + looksLikeCtor = false; + else if (fun->identity()->isNameId() || fun->identity()->isTemplateNameId()) + looksLikeCtor = true; + + if (! looksLikeCtor) { + translationUnit()->error(ast->ctor_initializer->firstToken(), + "only constructors take base initializers"); + } } - int previousVisibility = semantic()->switchVisibility(Symbol::Public); - int previousMethodKey = semantic()->switchMethodKey(Function::NormalMethod); + const int previousVisibility = semantic()->switchVisibility(Symbol::Public); + const int previousMethodKey = semantic()->switchMethodKey(Function::NormalMethod); semantic()->check(ast->function_body, fun->members()); |