For the following code: #define MYMACRO(NAME) myOutputStream << #NAME; MYMACRO(Group) you would expect that "Group" would be output. However, as there are many overloaded operator<< functions, none of which take a const char* argument, the function that's actually called is operator<<(bool). Hence what actually gets output is "TRUE". An actual example of this is in serializers\osgAnimation\Animation.cpp, WRITE_CHANNEL_FUNC2. So the simple solution to this is to add operator<<(const char*), attached. "