From b3a9ac5c3b78feca5526abc32165fa6811870cbb Mon Sep 17 00:00:00 2001 From: PKEuS Date: Sun, 10 Mar 2013 06:11:25 -0700 Subject: [PATCH] Fixed #4644: Don't assign varid to template parameter when 'typename' is used --- lib/tokenize.cpp | 2 +- test/testtokenize.cpp | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index 4af482f8d..2e83066cd 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -2712,7 +2712,7 @@ void Tokenizer::setVarId() notstart.insert("return"); notstart.insert("sizeof"); if (!isC()) { - static const char *str[] = {"delete","friend","new","throw","using","virtual","explicit"}; + static const char *str[] = {"delete","friend","new","throw","using","virtual","explicit","typename"}; notstart.insert(str, str+(sizeof(str)/sizeof(*str))); } diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index 530a4541f..4432e3cc8 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -270,6 +270,7 @@ private: TEST_CASE(varid_templatePtr); // #4319 TEST_CASE(varid_templateNamespaceFuncPtr); // #4172 TEST_CASE(varid_variadicFunc); + TEST_CASE(varid_typename); // #4644 TEST_CASE(varidclass1); TEST_CASE(varidclass2); @@ -4283,6 +4284,11 @@ private: "1: int foo ( . . . ) ;\n", tokenizeDebugListing("int foo(...);")); } + void varid_typename() { + ASSERT_EQUALS("\n\n##file 0\n" + "1: template < int d , typename A , typename B >\n", tokenizeDebugListing("template")); + } + void varidclass1() { const std::string actual = tokenizeDebugListing( "class Fred\n"