У вас в вопросе приведено new-expression, которое возвращает указатель типа bool *
. Откуда вы вдруг взяли "указатель на void" - не ясно. New-expression никогда не возвращает "указатель на void".
При этом любой указатель в языке С++ неявно приводим к типу bool
. Именно это и используется в вашем примере.
Дополнительно можно заметить, что начиная с С++20 преобразование указателей к типу bool
является сужающим (narrowing). Это означает что оно, в частности, больше не будет выполняться неявно в контексте списковой инициализации
bool value1{ new bool(true) }; // Ошибка
Я, правда, не помню навскидку, было ли это изменение в итоге принято как дефект C++17 или как несовместимое изменение языка.