Sobrecarga de función basada en el valor frente a la referencia constante

¿Declara algo como lo siguiente

void foo(int x)        { std::cout << "foo(int)"         << std::endl; }
void foo(const int &x) { std::cout << "foo(const int &)" << std::endl; }

Alguna vez tiene sentido? ¿Cómo podría la persona que llama diferenciar entre ellos? He intentad

foo(9);  // Compiler complains ambiguous call.

int x = 9;
foo(x);  // Also ambiguous.

const int &y = x;
foo(y);  // Also ambiguous.

Respuestas a la pregunta(5)

Su respuesta a la pregunta