The way I conceptualize this, which may be somewhat off the mark (the name lookup rules are not clearly stated in the documentation), is that there are two separate namespaces here. There is a module namespace and a lexical namespace. Ordinary use looks up things in the module namespace and installs them in the lexical namespace; as such, ordinary uses cannot see each other. pub use also writes into the current module, so a pub use can be seen by future uses.
This is also why the behavior of relative and absolute paths in use statements (use std::foo, use self::bar) and expressions (::std::foo, bar) differs; there are different rules for starting in the module tree versus lexical scope. extern crate is a bit odd because it writes into lexical scope and exposes a module at the same time.
I like to think that paths in use items are implicitly global.[quote="sorear, post:4, topic:4744"]
Ordinary use looks up things in the module namespace and installs them in the lexical namespace; as such, ordinary uses cannot see each other. pub use also writes into the current module, so a pub use can be seen by future uses.
[/quote]
Thanks! I was thinking a little different and was mistaking.