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

struct T
{
    char *p;
};//T

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

    printf("%s", t);

    return 0;
}//main
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.

gg