referenciando un puntero nulo dentro de typeid

Mientras investigaba una pregunta reciente, me encontré con la siguiente cláusula en el estándar '03 [1]:

Cuando typeid se aplica a una expresión lvalue cuyo tipo es un tipo de clase polimórfica (10.3), el resultado se refiere a un objeto type_info que representa el tipo del objeto más derivado (1.8) (es decir, el tipo dinámico) al que el lvalue se refiere. Si la expresión lvalue se obtiene aplicando el operador unario * a un puntero y el puntero es un valor de puntero nulo (4.10), la expresión typeid produce la excepción bad_typeid (18.5.3).

Específicamente, me pregunto sobre el último bit, que proporciona un comportamiento bien definido para el resultado de desreferenciar un puntero nulo. Por lo que puedo decir, esta es la única vez que se hace esto [2]. Específicamente,dynamic_cast<T&> no tiene un tratamiento especial para este caso, y ese parece ser un escenario mucho más útil. Doblemente teniendo en cuentadynamic_cast<T&> ya está definido como lanzar una excepción bajo ciertas circunstancias.

¿Hay alguna razón específica por la que esta expresión en particular recibió un tratamiento especial? Parece completamente arbitrario, así que supongo que hay un caso de uso específico que tenían en mente.

[1] Existe una cláusula similar en '11, pero se refiere a expresiones de valor de gl, en lugar de expresiones de valor.

[2]delete 0; ydynamic_cast<T*>(0) se acercan, pero en ambos casos se trata de un valor de puntero, en lugar de un objeto real.

Respuestas a la pregunta(1)

Su respuesta a la pregunta