>> ...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?
#include <stdio.h> 

struct T
    char *p;

int main() 
    T t;
    t.p = "Hello World\n";

    printf("%s", t);

    return 0;
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...)

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.