Понимание «самого неприятного анализа» - зачем разрешать неоднозначный синтаксис?

Пытаясь понять «самый неприятный синтаксический анализ» проблема в C / C ++, этот вопрос сразу приходит на ум - почему есть синтаксис, который вызывает эту проблему для начала?

Например,

class Timer
{
public:
    Timer();
};

class TimeKeeper
{
public:
    TimeKeeper(const Timer& t);

    int get_time()
    {
        return 1;
    }
};

int main()
{
    TimeKeeper time_keeper(Timer());
    // the above is eq to this: TimeKeeper time_keeper(Timer (*)());
}

Так почему бы просто не запретитьTimeKeeper time_keeper(Timer()) быть объявлением функции, которая принимает безымянную функцию ptr, возвращающую тип Timer? ЯвляетсяTimeKeeper time_keeper(Timer (*)()) уступает в качестве объявления функции?

Разве не из-за этого синтаксиса мы даже получаем эту двусмысленность или я что-то упускаю?

РЕДАКТИРОВАТЬ: Лично я никогда не использовалTimeKeeper time_keeper(Timer()) как объявление функции. Я всегда использовалTimer (*)() указать указатель на функцию, поскольку я нахожу это более понятным.

Ответы на вопрос(2)

Ваш ответ на вопрос