Это связано с тем, что TimeKeeper time_keeper(Timer());
интерпретируется как объявление функции, а не как определение переменной. Это само по себе не является ошибкой, но когда вы пытаетесь получить доступ к get_time()
члену time_keeper (который является функцией, а не экземпляром TimeKeeper), ваш компилятор завершается ошибкой.
Вот как ваш компилятор просматривает код:
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();
}