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"