Por que objetos anônimos às vezes exigem um construtor padrão?

Se eu escrever o seguinte programa, ele funcionará conforme o esperado:

struct Foo {
    Foo (std::string x) { std::cout << x << std::endl; }
};

int main () { Foo("hello, world"); }

No entanto, se eu escrever um programa um pouco diferente, recebo um erro de compilação:

struct Foo {
    Foo (std::string x) { std::cout << x << std::endl; }
};

std::string x("hello, world");

int main () { Foo(x); }

O erro é:

prog.cc: In function 'int main()':
prog.cc:10:20: error: no matching function for call to 'Foo::Foo()'

O erro completo pode ser visto no IDEONE.

Por que o erro ocorre no segundo programa e não no primeiro?

questionAnswers(3)

yourAnswerToTheQuestion