------- Comment #2 from jakub at gcc dot gnu dot org 2009-02-16 21:05 ------- I believe all 3 are the same issue. static const_reference _S_value (_Const_Base_ptr __x) { return static_cast < _Const_Link_type > (__x)->_M_value_field; }
casts pointer to _Rb_tree_node_base to pointer to pointer to _Rb_tree_node <_Val> and then dereferences it. Given that: template < typename _Val > struct _Rb_tree_node:public _Rb_tree_node_base { ... }; at least the initial portion of the structs is the same. _S_value is called by _S_key with the same argument, which is called from _M_lower_bound template (_Link_Type aka. _Rb_tree_node_base isn't const in that pointer anymore). -- jakub at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |bkoz at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39207