From the first principles the essence, starting with [basic]
value, object, reference, function, enumerator, type, class member, bit field, pattern, specialization pattern, namespace, parameter package or this . [...] Each name denoting an object is entered by a declaration.
Ads announce things. To be declared means that it was introduced by a declaration from [basic.scope.declarative]
Each name is entered in some part of the program text, called the declarative region, which is the largest part of the program in which this name is valid, that is, in which this name can be used as an unqualified name to refer to the same object.
Names declared by the declaration are entered in the area in which the announcement occurs, except that the presence of the friend specifier (11.3), certain uses of the developed type specifier (7.1.6.3) and (7.3.4) change this general behavior.
None of these exceptions matter here, since we are talking about using-declarations, not about using-directives. Let me modify your example a bit to avoid a global namespace:
namespace N {
So, for starters, N::i is an entity declared in the namespace N and entered into the realm N Now add use-declarations:
namespace B {
From [namespace.udecl] we have:
If the using declaration calls the constructor (3.4.3.1), it implicitly declares the set of constructors in the class in which the usage declaration appears (12.9); otherwise, the name specified in the usage declaration is a synonym for a set of declarations in a different namespace or class.
Using a declaration using N::i does not name the constructor, so instead of having the name i be a new entity, instead it is a synonym for N::i .
Basically, both i are names entered and declared in their respective namespaces. In N , i declares an object with a static link, but in B , i declares a synonym for this entity - not a new object.