The _Relative_pointer_impl (and its const variant) implementation invokes undefined behavior as it computes differences and compares pointers pointing to different objects.
For example int i; RelPtr<int> p, q; p.set(&i); q.set(&i); if (p == q) will reconstruct pointer values based on the addresses of p and q. This invokes undefined behavior. The fix is to do all the pointer arithmetic and the comparisons using an unsigned integer type (uintptr_t), not using char *. Likely this causes 23_containers/vector/ext_pointer/modifiers/insert.cc to fail on alias-improvements branch for i?86 (points-to analysis will correctly conclude that the objects pointed to by the pointers returned from get() point to different objects). -- Summary: _Relative_pointer_impl invokes undefined behavior Product: gcc Version: 4.4.0 Status: UNCONFIRMED Keywords: wrong-code Severity: critical Priority: P3 Component: libstdc++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: rguenth at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38720