const_cast from const to not const is safe if the original pointer was not const .
If the original pointer is const (as in the case of your example), then the behavior is undefined.
If you wrote
const int* pc = new int(3);
then you can drop const -ness pc .
source share