Demonstation of what can go wrong with c++ smart pointers destroyin up incomplete types