aviso c ++: endereço da variável local

int * ref () { int tmp = 100; return &tmp; } int main () { int * a = ref(); cout << *a << endl; } 

Eu sei que a function ref () está alocada espaço de pilha. Ele será destruído assim que a function sair. Assim, o compilador fornecerá informações de aviso. Mas a minha pergunta é por que o resultado retornado ainda está correto.