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?