例えば、
 namespace HOKJELKDSLKHLKFJHLEBIFBSDIF {
  class X { public: int x; X() : x(0) { } };
 }
という名前空間とクラスがあったとします。
この X を使いたい場合に、この長たらしい名前空間を何度も書きたくないので
 namespace A {
  using namespace HOKJELKDSLKHLKFJHLEBIFBSDIF;
  void foo(X x);
 }
と、「ヘッダファイル内に」書いたとします。
すると、
 int main() {
  A::X x;
  A::foo(x);
 }
のように、仕様上 A::X として使えるようになってしまいます。
エイリアスを使っても、そのエイリアスが外部で使えてしまいます。

A の名前空間を通じて X を参照できないようにし、
なおかつ foo の X などであの長い名前空間を使えないようにする方法って
何かないんでしょうか?