Devolviendo el objeto temporal y enlazándolo a la referencia const [duplicado]

Posible duplicado:
¿Una referencia constante prolonga la vida de un temporal?

Mi compilador no se queja de asignar una referencia temporal a const:

string foo() {
  return string("123");
};

int main() {
  const string& val = foo();
  printf("%s\n", val.c_str());
  return 0;
}

¿Por qué? Pensé que esa cadena regresó defoo es temporal y val puede apuntar al objeto que ha finalizado la vida útil. ¿El estándar de C ++ permite esto y prolonga la vida útil del objeto devuelto?

Respuestas a la pregunta(1)

Su respuesta a la pregunta