http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49298
Jonathan Wakely <redi at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2011.06.06 09:53:32 Known to work| |4.5.2 Summary|c++0x regression: sorry, |[4.6/4.7 Regression] |unimplemented: unexpected |[C++0x] sorry, |ast of kind field_decl |unimplemented: unexpected | |ast of kind field_decl Ever Confirmed|0 |1 Known to fail| |4.6.0, 4.7.0 --- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> 2011-06-06 09:53:32 UTC --- reduced: namespace detail { template<class Parent, class Member> inline unsigned offset_from_pointer_to_member(const Member Parent::* ptr_to_member) { const Parent * const parent = 0; const char *const member = reinterpret_cast<const char*>(&(parent->*ptr_to_member)); return unsigned(member - reinterpret_cast<const char*>(parent)); } template<class Parent, class Member> inline Parent *parent_from_member(Member *member, const Member Parent::* ptr_to_member) { return (Parent*)((char*)member - offset_from_pointer_to_member(ptr_to_member)); } template<class Parent, class Member> inline const Parent *parent_from_member(const Member *member, const Member Parent::* ptr_to_member) { return (const Parent*)((const char*)member - offset_from_pointer_to_member(ptr_to_member)); } } template<class Config> class list_impl { struct data_t { } data_; data_t* get(); static void priv_container_from_end_iterator() { data_t *d = get(); (void)detail::parent_from_member<list_impl, data_t>(d, &list_impl::data_); } }; interface.cc: In static member function 'static void list_impl<Config>::priv_container_from_end_iterator()': interface.cc:40:80: sorry, unimplemented: unexpected ast of kind field_decl interface.cc:40:80: internal compiler error: in potential_constant_expression_1, at cp/semantics.c:7952