See [basic.start.dynamic] p1:
Dynamic initialization of a non-local variable with static storage duration is unordered if the variable is an implicitly or explicitly instantiated specialization, is partially-ordered if the variable is an inline variable that is not an implicitly or explicitly instantiated specialization, and otherwise is ordered.
Therefore, the type of variable you are describing has "partially-ordered initialization". According to p2:
Dynamic initialization of non-local variables V and W with static storage duration are ordered as follows:
- ...
- If Vhas partially-ordered initialization,Wdoes not have unordered initialization, andVis defined beforeWin every translation unit in whichWis defined, then
- if the program starts a thread (4.7) other than the main thread (6.6.1), the initialization of Vstrongly happens before the initialization ofW;
- otherwise, the initialization of Vis sequenced before the initialization ofW.
 
- ...
So to summarize, assuming that there are no instantiated templates in the picture:
- If you have two namespace-scope inline variables VandWsuch thatVis defined beforeWin every translation unit, thenVis initialized beforeW.
- If only Vis inline, andWis some non-inline namespace-scope variable defined in exactly one translation unit,Vwill be initialized beforeWas long asV's definition precedesW's in that one translation unit.
- If the non-inline variable is defined before the inline variable, their initialization order cannot be guaranteed.
An intuitive way to think about initialization order is that, just as in C++14, the compiler initializes each translation unit in order, with the relative ordering of different translation units unspecified (and they can be interleaved with each other), but an inline variable with external linkage is considered to be initialized the first time the implementation "hits" one of its definitions which may be in any translation unit.
Also see p5:
It is implementation-defined whether the dynamic initialization of a non-local inline variable with static
storage duration is sequenced before the first statement of main or is deferred. If it is deferred, it strongly
happens before any non-initialization odr-use of that variable. It is implementation-defined in which threads
and at which points in the program such deferred dynamic initialization occurs.