This includes nested types in the member list, even if there are no members of that type. Note that structs and classes have themselves as an "implicit struct" as the first member, so we skip implicit ones.
Most of the work (for me) was figuring out the tests that broke as a result of the ordering changes. In particular, please scrutinize the Objective C one, which doesn't actually nest a struct but has a member function with a pointer to an incomplete struct type.