Sticky settings

An artefact directive changes the current settings; every later $MESSAGE copies them. So a setting applies to the messages after it, until it is changed again:

$STRING ENABLE
$MESSAGE A          # AStr
$STRING DISABLE
$MESSAGE B          # nothing
$MESSAGE C : STRING # CStr — this message only

Names

A generated name is prefix + message name + postfix.

ArtefactPrefixPostfix
$STRINGStr
$STREAMABLEStreamable
$ERRORError
$EXCEPTIONException
$THROWThrow
$SYSLOGLog

The first PREFIX, POSTFIX, NOPREFIX or NOPOSTFIX given to an artefact replaces both defaults; later ones change only their own side:

$STRING PREFIX get          # getHello   (not getHelloStr)
$STRING POSTFIX Text        # getHelloText
$EXCEPTION NOPREFIX NOPOSTFIX   # Hello

Two artefacts must not end up with the same name for the same message with the same parameters — the C++ compiler would reject the duplicate.

LOCALE EXTRA

On by default: each function comes twice, the second with a trailing std::locale const &loc that chooses the language and the number format. LOCALE EXTRA DISABLE drops that overload. For $EXCEPTION it is the constructor taking a locale — generated anyway when $THROW needs it.