diff --git a/lib/tokenlist.cpp b/lib/tokenlist.cpp index 0ffcf7e37e4..a46fad5d021 100644 --- a/lib/tokenlist.cpp +++ b/lib/tokenlist.cpp @@ -1055,7 +1055,10 @@ static void compilePrecedence2(Token *&tok, AST_state& state) else compileUnaryOp(tok, state, compileExpression); tok = tok2->link()->next(); - } else if (Token::simpleMatch(tok->previous(), "requires {")) { + } else if (Token::simpleMatch(tok->previous(), "requires {") + || (Token::simpleMatch(tok->previous(), ")") + && tok->linkAt(-1) + && Token::simpleMatch(tok->linkAt(-1)->previous(), "requires ("))) { tok->astOperand1(state.op.top()); state.op.pop(); state.op.push(tok); diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index e59f7b3be62..eefc0b8aba0 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -7147,6 +7147,7 @@ class TestTokenizer : public TestFixture { ASSERT_EQUALS("crequires{ac::||= a{b{||", testAst("template concept c = requires { a{} || b{}; } || a::c;")); ASSERT_EQUALS("ifrequires{(", testAst("if (requires { true; }) {}")); // #13308 + ASSERT_EQUALS("Crequires({requires({||= sizeofT(4== sizeofT(8==", testAst("concept C = requires() { sizeof(T) == 4; } || requires() { sizeof(T) == 8; };")); } void astcast() {