title: Forward declaration of type defined with `using`
body: <p>Let's assume I have such situation:</p>
  
  <pre><code>//A.hpp
  #include "B.hpp"
  #include "C.hpp"
  #include "D.hpp"
  
  using A = boost::variant&lt;B, C, D&gt;;
  
  //B.hpp
  #include &lt;memory&gt;
  
  class A;
  using AA = std::unique_ptr&lt;A&gt;;
  </code></pre>
  
  <p>This give me following error: <code>error: typedef redefinition with different types ('boost::variant&lt;B, C, D&gt;' vs 'A')</code></p>
  
  <p>I can't omit <code>#include</code>'s in <code>A.hpp</code> because <code>boost::variant</code> wants complete types.</p>
  
  <p>How to forward declare <code>A</code> which is defined with <code>using</code>? </p>
  
  <p>If it is not possible, I would like to now, how to solve my problem avoiding a lot of boilerplate code.</p>