What are the cases in general which require template argument to be complete? <p>Consider simple code :</p> <pre><code>struct x; template&lt;typename&gt; void func(){} int main() { func&lt;x&gt;(); return 0; } </code></pre> <p>This above code doesn't requires class <code>x</code> to be complete, are there any other cases which don't require <code>x</code> to be complete? . Also in general what are the cases which require template argument to be complete?</p>