Entendendo a análise mais problemática - por que permitir uma sintaxe ambígua?

Ao tentar entender o problema "Mais problemático" em C / C ++, essa questão vem imediatamente à mente - por que uma sintaxe que faz com que esse problema comece?

Por exemplo,

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 (*)());
}

Então, porque não simplesmente desautorizarTimeKeeper time_keeper(Timer()) ser uma declaração de função que leva uma função sem nome ptr retornando tipo Timer? ÉTimeKeeper time_keeper(Timer (*)()) inferior como um declarator de função?

Não é devido a esta sintaxe que chegamos a ter essa ambiguidade ou estou faltando alguma coisa?

EDIT: Pessoalmente, eu nunca useiTimeKeeper time_keeper(Timer()) como uma declaração de função. Eu sempre usei oTimer (*)() para especificar um ponteiro de função como eu acho mais claro.

questionAnswers(2)

yourAnswerToTheQuestion