c++ compilation functor most-vexing-parse

c++ - ¿Por qué funciona llamar a un functor con una variable no declarada?



compilation most-vexing-parse (1)

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.