Retornando 'c_str' de uma função

Isto é de uma pequena biblioteca que eu encontrei online:

const char* GetHandStateBrief(const PostFlopState* state)
{
    static std::ostringstream out;

    // ... rest of the function ...

    return out.str().c_str()
}

No meu código, estou fazendo o seguinte:

const char *d = GetHandStateBrief(&post);
std::cout<< d << std::endl;

Agora, primeirod&nbsp;lixo contido. Percebi então que a string C que estou obtendo da função é destruída quando a função retorna porquestd::ostringstream&nbsp;está alocado na pilha. Então eu adicionei:

return strdup( out.str().c_str());

E agora posso obter o texto que preciso da função.

Eu tenho duas perguntas:

Estou entendendo isso corretamente?

Mais tarde notei queout&nbsp;(do tipostd::ostringstream) foi alocado com armazenamento estático. Isso não significa que o objeto deve permanecer na memória até que o programa termine? E se sim, então por que a string não pode ser acessada?