What difference is there between:
int n;
namespace NS {
int n;
};
class C {
static int n;
};
the only difference is how you access it, C::n, NS::n, or just n. Either way you have global storage of data. In the class case you might be able to control it's visibility a little more, but it's still global data.
Well, obviously there is no difference between ::n and NS::n, they're both namespace-level objects of static storage duration, one in the :: namespace and the other in the NS namespace. The only difference you could possibly point to is that they're in two different namespaces.
The class variable is a different kettle of fish. They way you have it declared, it is private to objects of static type C. Sure, it has static storage duration with all that entails, but since it does not entail a lot if you follow long-established conventions of grouping all related class functions in the same translation unit, order of construction is a non-issue (order of construction is well defined by the standard within a translation unit). I see nothing wring with class variables when they are appropriate: they solve a problem that is impossible to solve any better way.