What C++ is doing under the hood is:
except in random order (which is why stuff worked fine for Ben), not
And if A's constructor calls a function dealing with B, there's
neither compile-time nor run-time analysis done to detect that and say
"whoops, let's construct B before A".