title: Correct way to using namespace in nested namespace scope
body: <p>We have in code one common namespace <code>MainNamespace</code> and a lot of namespace per module eg. <code>ModuleNamespace</code>, <code>DifferentModuleNamespace</code>. Module namespaces are inside the main namespace. </p>
  
  <p>When we create a new class and need another class from different module we have to declare some using to avoid writing full namespace path.</p>
  
  <p>What is consider as a good practice in such situation:</p>
  
  <p>Using namespace with full path:</p>
  
  <pre><code>namespace MainNamespace {
  namespace ModuleNamespace {
  
  using MainNamespace::DifferentModuleNamespace::Foo;
  
         class MyClass {
             void method(Foo);
         };
  }
  }
  </code></pre>
  
  <p>or remove <code>MainNamespace</code> namespace from path:</p>
  
  <pre><code>namespace MainNamespace {
  namespace ModuleNamespace {
  
  using DifferentModuleNamespace::Foo;
  
     class MyClass {
         void method(Foo);
     };
  }
  }
  </code></pre>
  
  <p>or maybe different approach is better?</p>
  
  <p>Edit:</p>
  
  <p>Ok, maybe different question. Is there any situation when using absolute paths to namespace (<code>using A = Main::ModuleA::A;</code>) will be safer than using short paths(<code>using A = ModuleA::C;</code>). When we do it in the same main namespace.</p>
  
  <p>file A.h:</p>
  
  <pre><code>namespace Main 
  {
      namespace ModuleA {
          class A
          {
          public:
              A();
              ~A();
          };
  
          class C
          {
          public:
              C();
              ~C();
          };
      }
  }
  </code></pre>
  
  <p>file B.h:</p>
  
  <pre><code>  #include "A.h"
  
      namespace Main {
          namespace ModuleB {
  
              class B
              {
                  using A = Main::ModuleA::A;
                  using A = ModuleA::C;
  
              public:
                  B();
                  ~B();
                  void foo(A a);
                  void bar(C c);
              };
          }
      }
  </code></pre>