@@ -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);
@@ -4192,6 +4196,47 @@ class TestTokenizer : public TestFixture {
41924196 ASSERT (func8 && func8->isAttributeNoreturn () && func8->isAttributePure () && func8->isAttributeNothrow () && func8->isAttributeConst ());
41934197 }
41944198
4199+ void cppMaybeUnusedBefore () {
4200+ const char code[] = " [[maybe_unused]] int var {};" ;
4201+ const char expected[] = " int var { } ;" ;
4202+
4203+ SimpleTokenizer tokenizer (settings0, *this );
4204+ ASSERT (tokenizer.tokenize (code));
4205+
4206+ ASSERT_EQUALS (expected, tokenizer.tokens ()->stringifyList (nullptr , false ));
4207+
4208+ const Token *var = Token::findsimplematch (tokenizer.tokens (), " var" );
4209+ ASSERT (var && var->isAttributeMaybeUnused ());
4210+ }
4211+
4212+ void cppMaybeUnusedAfter () {
4213+ const char code[] = " int var [[maybe_unused]] {};" ;
4214+ const char expected[] = " int var { } ;" ;
4215+
4216+ SimpleTokenizer tokenizer (settings0, *this );
4217+ ASSERT (tokenizer.tokenize (code));
4218+
4219+ ASSERT_EQUALS (expected, tokenizer.tokens ()->stringifyList (nullptr , false ));
4220+
4221+ const Token *var = Token::findsimplematch (tokenizer.tokens (), " var" );
4222+ ASSERT (var && var->isAttributeMaybeUnused ());
4223+ }
4224+
4225+ void cppMaybeUnusedStructuredBinding () {
4226+ const char code[] = " [[maybe_unused]] auto [var1, var2] = f();" ;
4227+ const char expected[] = " auto [ var1 , var2 ] = f ( ) ;" ;
4228+
4229+ SimpleTokenizer tokenizer (settings0, *this );
4230+ ASSERT (tokenizer.tokenize (code));
4231+
4232+ ASSERT_EQUALS (expected, tokenizer.tokens ()->stringifyList (nullptr , false ));
4233+
4234+ const Token *var1 = Token::findsimplematch (tokenizer.tokens (), " var1" );
4235+ ASSERT (var1 && var1->isAttributeMaybeUnused ());
4236+ const Token *var2 = Token::findsimplematch (tokenizer.tokens (), " var2" );
4237+ ASSERT (var2 && var2->isAttributeMaybeUnused ());
4238+ }
4239+
41954240
41964241 void splitTemplateRightAngleBrackets () {
41974242 {
0 commit comments