title: Why are two using clauses resolving to the same type seen as ambigious in gcc
body: <p>I have two base classes with using clauses</p>
  
  <pre><code> class MultiCmdQueueCallback {
    using NetworkPacket  = Networking::NetworkPacket;
    ....
   }
  
  
   class PlcMsgFactoryImplCallback {
     using NetworkPacket = Networking::NetworkPacket;
    ....
   }
  </code></pre>
  
  <p>I then declare a class </p>
  
  <pre><code>class PlcNetwork : 
    public RouterCallback, 
    public PlcMsgFactoryImplCallback, 
    public MultiCmdQueueCallback {
    private:
      void sendNetworkPacket(const NetworkPacket &amp;pdu);
  }
  </code></pre>
  
  <p>the compiler then flags an error  reference to 'NetworkPacket' is ambiguous 'sendNetworkPacket(NetworkPacket &amp;...  '</p>
  
  <p>Now both 'using clauses' resolve to the same underlying class Networking:NetworkPacket</p>
  
  <p>and in fact if I replace the method declaration with:</p>
  
  <pre><code> void sendNetworkPacket(const Networking::NetworkPacket &amp;pdu);
  </code></pre>
  
  <p>it compiles fine. </p>
  
  <p>Why is the compiler treating each using clause as a distinct type even though they both point to the same underlying type. Is this mandated by the standard or do we have a compiler bug ? </p>