I got the code from here.
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(); }
From the looks of it, it should get compile error due to the line:
TimeKeeper time_keeper(Timer());
But it only happens if return time_keeper.get_time();
is present.
Why would this line even matter, the compiler would spot ambiguity on time_keeper(Timer() )
construction.
This is due to the fact that TimeKeeper time_keeper(Timer());
is interpreted as a function declaration and not as a variable definition. This, by itself, is not an error, but when you try to access the get_time()
member of time_keeper (which is a function, not a TimeKeeper instance), your compiler fails.
This is how your compiler view the code:
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(); }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With