How about the following case? Can the compiler deal with the initialization order of static variables correctly if there is dependency?
a.h
template<class T>
struct A { static double a; };
template<class T>
double A<T>::a = 1;
b.h
struct B { static double b; };
b.cpp
#include "b.h"
#include "a.h"
double B::b = A<int>::a;