@@ -273,6 +273,10 @@ class TestTokenizer : public TestFixture {
273273 TEST_CASE (functionAttributeListBefore);
274274 TEST_CASE (functionAttributeListAfter);
275275
276+ TEST_CASE (cppMaybeUnusedBefore);
277+ TEST_CASE (cppMaybeUnusedAfter);
278+ TEST_CASE (cppMaybeUnusedStructuredBinding);
279+
276280 TEST_CASE (splitTemplateRightAngleBrackets);
277281
278282 TEST_CASE (cpp03template1);
@@ -4193,6 +4197,47 @@ class TestTokenizer : public TestFixture {
41934197 ASSERT (func8 && func8->isAttributeNoreturn () && func8->isAttributePure () && func8->isAttributeNothrow () && func8->isAttributeConst ());
41944198 }
41954199
4200+ void cppMaybeUnusedBefore () {
4201+ const char code[] = " [[maybe_unused]] int var {};" ;
4202+ const char expected[] = " int var { } ;" ;
4203+
4204+ SimpleTokenizer tokenizer (settings0, *this );
4205+ ASSERT (tokenizer.tokenize (code));
4206+
4207+ ASSERT_EQUALS (expected, tokenizer.tokens ()->stringifyList (nullptr , false ));
4208+
4209+ const Token *var = Token::findsimplematch (tokenizer.tokens (), " var" );
4210+ ASSERT (var && var->isAttributeMaybeUnused ());
4211+ }
4212+
4213+ void cppMaybeUnusedAfter () {
4214+ const char code[] = " int var [[maybe_unused]] {};" ;
4215+ const char expected[] = " int var { } ;" ;
4216+
4217+ SimpleTokenizer tokenizer (settings0, *this );
4218+ ASSERT (tokenizer.tokenize (code));
4219+
4220+ ASSERT_EQUALS (expected, tokenizer.tokens ()->stringifyList (nullptr , false ));
4221+
4222+ const Token *var = Token::findsimplematch (tokenizer.tokens (), " var" );
4223+ ASSERT (var && var->isAttributeMaybeUnused ());
4224+ }
4225+
4226+ void cppMaybeUnusedStructuredBinding () {
4227+ const char code[] = " [[maybe_unused]] auto [var1, var2] = f();" ;
4228+ const char expected[] = " auto [ var1 , var2 ] = f ( ) ;" ;
4229+
4230+ SimpleTokenizer tokenizer (settings0, *this );
4231+ ASSERT (tokenizer.tokenize (code));
4232+
4233+ ASSERT_EQUALS (expected, tokenizer.tokens ()->stringifyList (nullptr , false ));
4234+
4235+ const Token *var1 = Token::findsimplematch (tokenizer.tokens (), " var1" );
4236+ ASSERT (var1 && var1->isAttributeMaybeUnused ());
4237+ const Token *var2 = Token::findsimplematch (tokenizer.tokens (), " var2" );
4238+ ASSERT (var2 && var2->isAttributeMaybeUnused ());
4239+ }
4240+
41964241
41974242 void splitTemplateRightAngleBrackets () {
41984243 {
0 commit comments