Унарный плюс (+) против буквальной строки

Сегодня я написал выражение:

"<" + message_id + "@" +  + ">"

и удивился, что это на самом деле скомпилировано (PSmessage_id&nbsp;является QString, он также будет работать с std :: string)

Я часто делаю подобные вещи, пропускаю переменную во время работы и ожидаю, что компилятор скажет мне, где я до сих пор пропускаю записи. Финал будет выглядеть примерно так:

"<" + message_id + "@" + network_domain + ">"

Теперь я хотел бы знать, почему унарный оператор + действителен для строкового литерала !?