You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
expandHashHash(): function-like macro not expanded when '(' is not adjacent (PAR-style indirection) #656
When ## concatenation produces a function-like macro name but the argument list (...) is not immediately adjacent in the replacement text (hidden behind a secondary macro parameter), simplecpp aborts expansion and emits the concatenated token bare.
Reproducer
#definePAR(a, ...) a __VA_ARGS__
#definePREFIX_SCALAR(T, N) T N
#defineDISPATCH(kind, ...) PAR(PREFIX_ ## kind, (__VA_ARGS__))
DISPATCH(SCALAR, int, x)
Expected:
int x
Actual:
1:
2:
3:
4: PREFIX_SCALAR ( int , x )
Root cause
expandHashHash() checks only B->next->op == '(' immediately after the ## result. In the PAR pattern, B->next is , (not (), so the function-like expansion is skipped.
Fix
A forward-scan fallback in the appendTokens context (expandResult==false) walks ahead on the same line, skipping , separators and resolving named parameter tokens via expandArg(), until ( is found.
Activity
firewave commentedon May 28, 2026
I am not seeing the
unknownMacromentioned in the report (that is a Cppcheck error) so I updated the expected output.