Dynamic Pointer Cast Cpp