From 8dbccad69c432a1663848da5a31ca189a2560e4c Mon Sep 17 00:00:00 2001 From: chrchr-github Date: Sat, 7 Mar 2026 20:44:38 +0100 Subject: [PATCH 1/2] Fix #14578 using-declarations not simplified with --std=c++03 --- lib/tokenize.cpp | 2 +- test/testsimplifyusing.cpp | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index 9f07767edc7..a72a6224f6b 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -2890,7 +2890,7 @@ static const Token* skipConstVolatileBackwards(const Token* tok) { bool Tokenizer::simplifyUsing() { - if (!isCPP() || mSettings.standards.cpp < Standards::CPP11) + if (!isCPP()) return false; // simplify using N::x; to using x = N::x; diff --git a/test/testsimplifyusing.cpp b/test/testsimplifyusing.cpp index 5f1c2592b12..e6b7be01d0b 100644 --- a/test/testsimplifyusing.cpp +++ b/test/testsimplifyusing.cpp @@ -75,6 +75,7 @@ class TestSimplifyUsing : public TestFixture { TEST_CASE(simplifyUsing36); TEST_CASE(simplifyUsing37); TEST_CASE(simplifyUsing38); + TEST_CASE(simplifyUsing39); TEST_CASE(simplifyUsing8970); TEST_CASE(simplifyUsing8971); @@ -106,12 +107,14 @@ class TestSimplifyUsing : public TestFixture { Platform::Type type = Platform::Type::Native; bool debugwarnings = true; bool preprocess = false; + Standards::cppstd_t cppstd = Standards::CPPLatest; }; #define tok(...) tok_(__FILE__, __LINE__, __VA_ARGS__) template std::string tok_(const char* file, int line, const char (&code)[size], const TokOptions& options = make_default_obj()) { - const Settings settings = settingsBuilder(settings0).certainty(Certainty::inconclusive).debugwarnings(options.debugwarnings).platform(options.type).build(); + const Settings settings = settingsBuilder(settings0).certainty(Certainty::inconclusive).debugwarnings(options.debugwarnings) + .platform(options.type).cpp(options.cppstd).build(); if (options.preprocess) { SimpleTokenizer2 tokenizer(settings, *this, code, "test.cpp"); @@ -925,6 +928,16 @@ class TestSimplifyUsing : public TestFixture { ASSERT_EQUALS("", errout_str()); } + void simplifyUsing39() { + const char code[] = "using std::wstring;\n" // #14578 + "std::wstring ws;"; + const char expected[] = "std :: wstring ws ;"; + ASSERT_EQUALS(expected, tok(code)); + ASSERT_EQUALS("", errout_str()); + ASSERT_EQUALS(expected, tok(code, dinit(TokOptions, $.cppstd = Standards::CPP03))); + ASSERT_EQUALS("", errout_str()); + } + void simplifyUsing8970() { const char code[] = "using V = std::vector;\n" "struct A {\n" From e6cbc1f094ed54db4c28cce24893684be560365d Mon Sep 17 00:00:00 2001 From: chrchr-github Date: Sat, 7 Mar 2026 20:47:04 +0100 Subject: [PATCH 2/2] Format --- test/testsimplifyusing.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/testsimplifyusing.cpp b/test/testsimplifyusing.cpp index e6b7be01d0b..63f4002ff91 100644 --- a/test/testsimplifyusing.cpp +++ b/test/testsimplifyusing.cpp @@ -114,7 +114,7 @@ class TestSimplifyUsing : public TestFixture { template std::string tok_(const char* file, int line, const char (&code)[size], const TokOptions& options = make_default_obj()) { const Settings settings = settingsBuilder(settings0).certainty(Certainty::inconclusive).debugwarnings(options.debugwarnings) - .platform(options.type).cpp(options.cppstd).build(); + .platform(options.type).cpp(options.cppstd).build(); if (options.preprocess) { SimpleTokenizer2 tokenizer(settings, *this, code, "test.cpp");