http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55041
--- Comment #8 from Jonathan Wakely <redi at gcc dot gnu.org> 2012-10-28 13:27:20 UTC --- The shared_ptr tests fail because GDB is getting the variable's type wrong, seeing it as the base class not the correct type: (gdb) p sp1 $1 = {<std::__shared_ptr<int, (__gnu_cxx::_Lock_policy)2>> = {_M_ptr = 0x12345678, _M_refcount = {_M_pi = 0x604010}}, <No data fields>} (gdb) p wp1 $2 = {<std::__weak_ptr<int, (__gnu_cxx::_Lock_policy)2>> = {_M_ptr = 0x12344321, _M_refcount = {_M_pi = 0x604040}}, <No data fields>} (gdb) p wp2 $3 = {<std::__weak_ptr<int, (__gnu_cxx::_Lock_policy)2>> = {_M_ptr = 0x56788765, _M_refcount = {_M_pi = 0x604070}}, <No data fields>} (gdb) p/r wp2 $4 = {<std::__weak_ptr<int, (__gnu_cxx::_Lock_policy)2>> = {_M_ptr = 0x56788765, _M_refcount = {_M_pi = 0x604070}}, <No data fields>} (gdb) p/r sp1 $5 = {<std::__shared_ptr<int, (__gnu_cxx::_Lock_policy)2>> = {_M_ptr = 0x12345678, _M_refcount = {_M_pi = 0x604010}}, <No data fields>} This doesn't look like a libstdc++ problem.