¿Cuál es la duración de un argumento predeterminado vinculado temporalmente a un parámetro de referencia?

Pensé que las referencias solo extendían la vida útil de los temporales a la vida misma de la referencia, pero la salida del siguiente fragmento parece contradictoria:

#include <iostream>

struct X{ ~X(){ std::cout << "Goodbye, cruel world!\n"; } };

X const& f(X const& x = X()){
  std::cout << "Inside f()\n";
  return x;
}

void g(X const& x){
  std::cout << "Inside g()\n";
}

int main(){
  g(f());
}

Ejemplo vivo. Salida:

Inside f()
Inside g()
Goodbye, cruel world!

Así parece que lo temporal se destruye después deg() se llama ... lo que da?

Respuestas a la pregunta(2)

Su respuesta a la pregunta