@Qwertiy, Вроде как нет. Первоначально pb
указывает на тот участок в памяти, в котором располагается объект типа D1
. Затем внутри mutate
мы закончили время жизни D1
, и на его месте расположили объект типа D2
. Однако, указатель pb
не изменился, мы его не трогали, он по прежнему указывает на тот же самый участок памяти.
Однако, того объекта, на который pb
указывал первоначально больше нет. Теперь на том месте, на который указывает pb
расположен другой объект. Более того, не просто другой объект, а объект другого типа. Что произойдёт, если мы попытаемся обратиться к новому объекту через "старый" указатель pb
? Пункт 6.6.6/8 явно запрещает такое обращение.