Почему новый оператор может возвращать * void для каждого типа указателя?

В C ++ запрещено присваивать указатель void * любому целочисленному указателю без явного приведения. Это требует использования static_cast.

Но что с этим:

int* iptr = new int;

Я знаю, что новый оператор определяется следующим образом:

void* operator new(size_t);

Как C ++ справляется с этим? Я знаю, что это основной вопрос, но важный. Я также знаю, что код низкого уровня должен использовать void. Но как это назначение может быть законным? iptr - это указатель на int, а new возвращает указатель на void, который должен вызвать сообщение типа «ошибка: недопустимое преобразование из« void * »в« int * ’[-fpermissive]».

Ответы на вопрос(1)

Ваш ответ на вопрос