c++ - ¿Por qué funciona llamar a un functor con una variable no declarada?
compilation most-vexing-parse (1)
Esta pregunta ya tiene una respuesta aquí:
class foo {
public:
bool operator () (int & i) {
return true;
}
};
int main() {
foo(WhyDoesThisCompile);
return 0;
}
Al pasar WhyDoesThisCompile
(sin espacios) al functor, el programa se compila.
¿Por qué es esto? Lo probé en clang 4.0.0.
No estás invocando al functor.
Estás declarando un foo
, llamado WhyDoesThisCompile
.
Sí, a pesar de los paréntesis.
Supongo que querías decir esto:
foo()(WhyDoesThisCompile);
// ^^^^^
// temp ^^^^^^^^^^^^^^^^^^^^
// of invocation of op()
// type
// `foo`
... que no.