A
Ich fürchte, es gibt dafür in C++ kein einheitliches Idiom.
Ich wäre aber geneigt, zu sagen, Fehlermeldungen sollten immer erst dort erzeugt werden, wo sie gebraucht werden.
Das hätte den Vorteil, dass keine Duplikate entstehen und Stacktracing möglich ist. Und Unit-Tests sollten ohnehin nicht auf genaue Fehlermeldungen testen (stattdessen auf den Typ der Exception, den Fehlercodeint oder auf ein contains keyword, etc.).
Außerdem gelten Fehlermeldungen afaik nicht als magische Konstanten, und wenn der User neben dem Fehlercode eine Übersetzung braucht, könnte an entsprechender Stelle ein Service aufgerufen werden, um diese Fehlermeldung zu finalisieren.