In my code i use little hack. If wrap string to a function translate, it will be marked for translation. No matter what namespace contains this function. So, i have #define translate(context, source, disambiguation) QmuTranslation::translate((context), (source), (disambiguation)) And use it like this: translate("QmuParserErrorMsg", "Unexpected token \"$TOK$\" found at position $POS$.", "Math parser error messages. Left untouched \"$TOK$\" and $POS$") When lupdate will parse a source code it will mark a string for translation. But clazy doesn't recognize this case and warn about "qstring-allocations". Where for canonical translate functions it doesn't.
Can you show a compilable-testcase. Must be minimal, as I'll shove the code directly into clazy's unit-tests thanks
Created attachment 111374 [details] compilable-testcase Minimal project that shows false positive warning. Uncomment strings to test canonical way.
tr() doesn't take QString as argument, so there's no allocation You can either use const char* in your translate function, or: translate(QStringLiteral("context"), QStringLiteral("string"), QStringLiteral("disambiguation")); I don't see a way clazy could distinguish this case
Yes, you are right. This ticket should be closed.