¿Por qué el nuevo operador puede devolver * nulo a cada tipo de puntero?

En C ++ no está permitido asignar un puntero nulo * a ningún puntero integral sin una conversión explícita. Esto requiere el uso de un static_cast.

Pero qué pasa con esto:

int* iptr = new int;

Sé que el nuevo operador se define de la siguiente manera:

void* operator new(size_t);

¿Cómo maneja esto C ++? Sé que esta es una pregunta básica, pero importante. También sé que el código de bajo nivel debe usar void. Pero, ¿cómo puede ser legal esta asignación? iptr es un puntero a int y new devuelve un puntero a void, lo que debería activar un mensaje como "error: conversión inválida de‘ void * ’a‘ int * ’[-fpermissive]".

Respuestas a la pregunta(2)

Su respuesta a la pregunta