advertencia c ++: dirección de la variable local

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

Sé que a la función ref () se le asigna espacio de stack. Se destruirá tan pronto como la función salga. Entonces el comstackdor dará información de advertencia. Pero mi pregunta es por qué el resultado de la devolución sigue siendo correcto.