¿Qué hay de malo en emitir como (void **) y device_array?

Ahi estaesta respuesta sobre otra pregunta sobre el uso decudaMalloc((void**)&device_array, num_bytes), que utilizavoid** como argumento de salida en lugar de pasar unvoid* como valor de retorno como el estándarmalloc.

Critica la API de NVIDIA y afirma:

La transmisión, como en (void **) y device_array, no es válida C y produce un comportamiento indefinido.

y ha sido votado varias veces (8 a partir de ahora), así que supongo que hay algo de verdad en ello.

No entiendo qué hay de malo en lanzar allí.

¿Qué es inválido C aquí?¿En qué caso esto conduciría a un comportamiento indefinido?

Todo lo que sé es que se compila sin previo aviso y se ejecuta con el comportamiento previsto para mí. Pero no conozco C hasta el nivel de especificación estándar.