http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45586
--- Comment #43 from Michael Matz <matz at gcc dot gnu.org> 2011-01-26 12:39:04 UTC --- Yep. With my patch the saner looking new_person->service.education.person.ss = *ss; statement is generated. It's possible that class containers actually contain something as first component that shouldn't be looked up, then the condition would be reversed, or that meanwhile the parent type is always reachable via the first component. The latter is definitely the case for types that don't have is_class set.