Do smart pointers break the principle of minimizing #includes in header files?
<p>I prefer to minimize the use of <code>#include</code> in my header files, using forward declarations wherever possible, and I believe this is considered good practice.</p>

<p>It works great if I have a method declaration like:</p>

<pre><code>bool IsFlagSet(MyObject *pObj);
</code></pre>

<p>However if I have <code>typedef Ptr&lt;MyObject&gt; MyObjectPtr</code> in <code>MyObject.h</code> and the API changes to:</p>

<pre><code>bool IsFlagSet(MyObjectPtr pObj);
</code></pre>

<p>Do I not now <em>have</em> to <code>#include "MyObject.h"</code>? Is there any way around this, or is it just the price one pays for using smart pointers?</p>
