class StringOrPtr
{
public:
StringOrPtr(const char* p) : p_(p) {}
StringOrPtr(const string& str) : p_(str.c_str()) {}
operator const char*() const { return p_; }

private:
const char* p_;
};

なんてのを作ったが、見た目が気持ち悪かったので使わなかった。