So I think in the end everything worked as supposed, and you fixed a bug in your code (although it may be just "U++ code style" "bug", not real bug causing some wrong results at runtime).
Well, it is all about optimization. Global initialization often creates various maps, e.g. map of image decoders. If we can say that these happen before any threads start, we can access these maps without mutexes. So the general rule is established as "never start threads before main" and AssertST is here to enforce it.