If two pointers point to different non-static data members of the same
object, or to subobjects of such members, recursively,
the pointer to the later declared member is required to compare greater provided
the two members have the same access control ([class.access]),
neither member is a subobject of zero size,
and their class is not a union.