You may want to use the latter regardless of when you were born, because macros have side effects that are not always visible, and you can always put your consts into a namespace.
The side effect in this case is noticeable if you have many calls to wxString::assign with the macro/const as argument.
If you use a const wxString, the data will be copied exactly once, and assign() will copy a pointer each time. If you use a macro, then assign() will call the CRT strlen, malloc, and memcpy functions each time!
One of the optimizations I made to the code completion tokenizer was replacing
if(blah...)
token = _T("::");
with
if(blah...)
token = constStrings::coloncolon;
in an inner loop. If you call the above a few hundred thousand times, then it is very noticeable.
EDIT: This is actually not due to using a macro, but due to the fact that you pass a const char* rather than a wxString. But the evil thing is that you don't know that. The macro does not show it.
Regarding header protection, macros are the only thing I know of (short of #pragma which is even more evil). But I guess this is a legitimate use of macros.