Fixed #3532 (false positive : missing constructor)
This commit is contained in:
parent
1309825bf1
commit
68e6511c87
|
@ -237,6 +237,7 @@ void TemplateSimplifier::removeTemplates(Token *tok)
|
|||
continue;
|
||||
|
||||
int indentlevel = 0;
|
||||
unsigned int countgt = 0; // Counter for ">"
|
||||
for (const Token *tok2 = tok->next(); tok2; tok2 = tok2->next()) {
|
||||
|
||||
if (tok2->str() == "(") {
|
||||
|
@ -260,8 +261,14 @@ void TemplateSimplifier::removeTemplates(Token *tok)
|
|||
tok->deleteThis();
|
||||
break;
|
||||
}
|
||||
|
||||
// Count ">"
|
||||
if (tok2->str() == ">")
|
||||
countgt++;
|
||||
|
||||
// don't remove constructor
|
||||
if (tok2->str() == "explicit") {
|
||||
if (tok2->str() == "explicit" ||
|
||||
(countgt == 1 && Token::Match(tok2->previous(), "> %type% (") && Token::simpleMatch(tok2->next()->link(), ") {"))) {
|
||||
Token::eraseTokens(tok, tok2);
|
||||
tok->deleteThis();
|
||||
goback = true;
|
||||
|
@ -282,10 +289,7 @@ void TemplateSimplifier::removeTemplates(Token *tok)
|
|||
else if (indentlevel >= 2 && tok2->str() == ">")
|
||||
--indentlevel;
|
||||
|
||||
else if (indentlevel >= 3 && tok2->str() == ">>")
|
||||
indentlevel -= 2;
|
||||
|
||||
else if (Token::Match(tok2, ">|>> class|struct %var% [,)]")) {
|
||||
else if (Token::Match(tok2, "> class|struct %var% [,)]")) {
|
||||
tok2 = tok2->next();
|
||||
Token::eraseTokens(tok, tok2);
|
||||
tok->deleteThis();
|
||||
|
|
|
@ -2320,6 +2320,12 @@ private:
|
|||
" template<class T> explicit Fred(T t) { }\n"
|
||||
"}";
|
||||
ASSERT_EQUALS("class Fred { explicit Fred ( T t ) { } }", tok(code));
|
||||
|
||||
// #3532
|
||||
const char code2[] = "class Fred {\n"
|
||||
" template<class T> Fred(T t) { }\n"
|
||||
"}";
|
||||
ASSERT_EQUALS("class Fred { Fred ( T t ) { } }", tok(code2));
|
||||
}
|
||||
|
||||
void namespaces() {
|
||||
|
|
Loading…
Reference in New Issue