Entender 'el análisis más desconcertante': ¿por qué permitir una sintaxis ambigua?

Al tratar de comprender el problema del "análisis más desconcertante" en C / C ++, esta pregunta viene inmediatamente a la mente: ¿por qué tener una sintaxis que haga que este problema comience?

Por ejemplo,

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

Entonces, ¿por qué no simplemente rechazarTimeKeeper time_keeper(Timer()) ¿Es una declaración de función que toma una función sin nombre ptr tipo de retorno Timer? EsTimeKeeper time_keeper(Timer (*)()) ¿De inferior como declarador de función?

¿No es debido a esta sintaxis que incluso obtenemos esta ambigüedad o me estoy perdiendo algo?

EDITAR: Personalmente, nunca he usadoTimeKeeper time_keeper(Timer()) como una declaracion de funcion. Siempre he usado elTimer (*)() para especificar un puntero de función cuando lo encuentre más claro.

Respuestas a la pregunta(2)

Su respuesta a la pregunta