The string, error, throw and syslog functions can be free functions or members.
NONMEMBER — the default
Declared in the header, defined in the source.
MEMBER OF Class
$STRING NONCONST MEMBER OF Reporter
$STRING PREFIX say
mstring defines std::string Reporter::sayReport( … ) in the source; you declare it in your class, with the same signature, and $INCLUDE the class's header:
class Reporter
{
public:
std::string sayReport( std::string const &what, std::locale const &loc );
std::string sayReport( std::string const &what );
};
The definition is written inside the $NAMESPACE, so the class must be declared in it (or in a namespace nested in it). CONST (the default) makes the member const.
MEMBER AS name
$STREAMABLE ENABLE NOPOSTFIX
$STRING MEMBER AS text NOPOSTFIX
$MESSAGE Point
@ x int
@ y int
"({$x}, {$y})"
Point p( 3, 4 );
std::string s = p.text( ); // "(3, 4)"
The function is declared and defined as a member of the message's streamable class and uses the stored values, so it takes no parameters (only loc in the locale overload). It needs $STREAMABLE ENABLE for that message — otherwise an error. The prefix and postfix still apply to name.

