title: std::unique_ptr pimpl in dll generates C4251 with visual studio
body: <p>This is not a breaking issue but I like to clean my code from warnings so this is getting on my nerves. </p>
  
  <p>I have been using the c++11 version of pimpl idiom to hide the class implementation for my library the usual way.</p>
  
  <pre><code>// dll header
  class FrameworkImpl;
  
  class EXPORT_API Framework
  {
      Framework(const Framework&amp;) = delete;
      Framework&amp; operator=(const Framework&amp;) = delete;
      Framework(Framework&amp;&amp;) = delete;
      Framework&amp; operator=(Framework&amp;&amp;) = delete;
  
  public:
      Framework();
      ~Framework();
  
  private:
      std::unique_ptr&lt;FrameworkImpl&gt; impl_;
  };
  
  // application implementation
  int main()
  {
      std::unique_ptr&lt;Framework&gt; test = std::make_unique&lt;Framework&gt;();
  }
  </code></pre>
  
  <p>Everything will be fine, but I will keep getting the warning:</p>
  
  <pre><code>warning C4251: 'Framework::impl_': class 'std::unique_ptr&lt;FrameworkImpl,std::default_delete&lt;_Ty&gt;&gt;' needs to have dll-interface to be used by clients of class 'Framework'
  </code></pre>
  
  <p>So I tried have to add:</p>
  
  <pre><code>template class EXPORT_API std::unique_ptr&lt;FrameworkImpl&gt;;
  </code></pre>
  
  <p>Before the forward declaration but the warning would just change to:</p>
  
  <pre><code>warning C4251: 'std::_Unique_ptr_base&lt;_Ty,_Dx&gt;::_Mypair': class 'std::_Compressed_pair&lt;_Dx,FrameworkImpl *,true&gt;' needs to have dll-interface to be used by clients of class 'std::_Unique_ptr_base&lt;_Ty,_Dx&gt;'
  </code></pre>
  
  <p>I have being seeing this issue since VS2010 and I cannot figure a good way to fix this. No problems on gcc or clang and it would break my heart to use the old raw pointer version..</p>