Más molesto análisis

Obtuve el código de aquí .

class Timer { public: Timer(); }; class TimeKeeper { public: TimeKeeper(const Timer& t); int get_time() { return 1; } }; int main() { TimeKeeper time_keeper(Timer()); return time_keeper.get_time(); } 

Por lo que parece, debería obtener un error de comstackción debido a la línea:

 TimeKeeper time_keeper(Timer()); 

Pero solo ocurre si return time_keeper.get_time(); está presente.

¿Por qué importaría esta línea, el comstackdor detectaría ambigüedad en la time_keeper(Timer() ) de time_keeper(Timer() ) .

Esto se debe al hecho de que TimeKeeper time_keeper(Timer()); se interpreta como una statement de función y no como una definición de variable. Esto, en sí mismo, no es un error, pero cuando intenta acceder al miembro get_time() de time_keeper (que es una función, no una instancia de TimeKeeper), su comstackdor falla.

Así es como su comstackdor ve el código:

 int main() { // time_keeper gets interpreted as a function declaration with a function argument. // This is definitely *not* what we expect, but from the compiler POV it's okay. TimeKeeper time_keeper(Timer (*unnamed_fn_arg)()); // Compiler complains: time_keeper is function, how on earth do you expect me to call // one of its members? It doesn't have member functions! return time_keeper.get_time(); }