:
#include "a.h"
#include "b.h"
B b;
A::A(){
b.Use();
}
#include "a.h"
A a;
#include "a.h"
#include "b.h"
extern A a;
extern B b;
int main() {
a.Use();
b.Use();
}
It is
implementation-defined
whether either
a or
b is
initialized before
main is entered or whether the
initializations are delayed until
a is first odr-used in
main. In particular, if
a is initialized before
main is entered, it is not guaranteed that
b will be
initialized before it is odr-used by the initialization of
a, that
is, before
A::A is called
. If, however,
a is initialized
at some point after the first statement of
main,
b will
be initialized prior to its use in
A::A. —
end example