std::string
предоставляет const char * c_str() const, который:
Получить эквивалент строки C
Генерирует нулевую последовательность символов (c-строка) с тем же содержимое как строковый объект и возвращает его как указатель на массив символы.
Конечный нулевой символ автоматически добавляется.
Возвращенный массив указывает на внутреннее местоположение с требуемым место для хранения этой последовательности символов плюс его завершение null-character, но значения в этом массив не должен изменяться в программы и предоставляются только на без изменений до следующего вызова не постоянная функция-член Строковый объект.
Почему бы просто не определить operator const char*() const {return c_str();}
?