From f3fbdc96e1d18c601bdf8c9abbea9c58e7082798 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Sat, 12 Jun 2010 08:32:05 +0200 Subject: [PATCH] Fixed #1788 (Tokenizer: template destructor is lost) --- lib/tokenize.cpp | 2 +- test/testsimplifytokens.cpp | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index 96fc0c888..fdb182808 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -2356,7 +2356,7 @@ void Tokenizer::simplifyTemplates() } // member function implemented outside class definition - else if (_indentlevel == 0 && _parlevel == 0 && Token::Match(tok3, (pattern + " :: %var% (").c_str())) + else if (_indentlevel == 0 && _parlevel == 0 && Token::Match(tok3, (pattern + " :: ~| %var% (").c_str())) { addtoken(name2.c_str(), tok3->linenr(), tok3->fileIndex()); while (tok3->str() != "::") diff --git a/test/testsimplifytokens.cpp b/test/testsimplifytokens.cpp index c5cea9468..8a683aeb4 100644 --- a/test/testsimplifytokens.cpp +++ b/test/testsimplifytokens.cpp @@ -103,6 +103,7 @@ private: TEST_CASE(template17); TEST_CASE(template18); TEST_CASE(template19); + TEST_CASE(template20); TEST_CASE(template_unhandled); TEST_CASE(template_default_parameter); TEST_CASE(template_default_type); @@ -1753,6 +1754,28 @@ private: ASSERT_EQUALS(expected, sizeof_(code)); } + void template20() + { + // Ticket #1788 - the destructor implementation is lost + const char code[] = "template class A\n" + "{\n" + "public:\n" + " ~A();\n" + "};\n" + "\n" + "template A::~A()\n" + "{\n" + "}\n" + "\n" + "A a;\n"; + + // The expected result.. + const std::string expected("; ; ; A a ; " + "class A { public: ~ A ( ) ; } " + "A :: ~ A ( ) { }"); + ASSERT_EQUALS(expected, sizeof_(code)); + } + void template_unhandled() { // An unhandled template usage should be simplified..