>> ...and I can't figure out what even after digging through the IBM source code ...
So you couldn't just look at the IString header to see how they did it?
If you want to use std::string, you'll have to change the implementation so that the "char*" is the first data member of the class. (A horrible idea by the way...)
t.p = "Hello World\n";
You shouldn't be using std::string anyways since IString provides tons of unprotected access to the string buffer itself.
std::string only returns constant pointers to the string buffer.