C'e' un
PICCOLO bug, grande come una casa:
la tua funzione ritorna il puntatore ad un buffer di memoria che e' stato deallocato all'uscita della funzione!
Ritorni il puntatore al buffer gestito dall'oggetto std::string, oggetto che e' locale alla funzione, e quindi distrutto all'usicta della stessa!
Se per caso ha funzionato, ha funzionato per bonta' divina
Decisamente meglio ritornare direttamente il std:;string!