bool value1 = new bool(true);new не возвращает указатель на выбранный тип?bool? int value1 = new int(1); - компилятор ругается.
bool *. Откуда вы вдруг взяли "указатель на void" - не ясно. New-expression никогда не возвращает "указатель на void".bool. Именно это и используется в вашем примере.bool является сужающим (narrowing). Это означает что оно, в частности, больше не будет выполняться неявно в контексте списковой инициализацииbool value1{ new bool(true) }; // Ошибкаbool может быть только два значения 0 или 1.bool будет преобразовано в 1.bool, где значение указателя эквивалентное nullptr будет означать false, а любое другое значение указателя - true.bool и обратно по очевидным причинам будет приводить к потере информации и не позволит восстановить исходный указатель. std::unitptr_t и обратно, то можно было бы ожидать сохранения значения указателя. Если бы мы приводили к другому указательному типу и обратно, то можно было бы ожидать сохранения значения указателя. А к bool и обратно - никаких шансов. bool не был тайпдефом. bool - это ключевое слово языка С++.bool был бы тайпдефом, он был бы тайпдефом на какой-нибудь разумно выбранный целочисленный тип. Какового в общем случае было бы совершенно недостаточно для сохранения указателя без потерь.
true и нет false. И в каждой библиотеке есть свое определение булевых операций._Bool с семантикой булева значения и строго определенными операциями. Только мало кто про это знает даже сегодня.
enum и неявного преобразования указателей из void *.