<p dir="ltr">See PR13657</p>
<div class="gmail_quote">On 18 Jan 2013 08:37, "Matthieu Monrocq" <<a href="mailto:matthieu.monrocq@gmail.com">matthieu.monrocq@gmail.com</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
The snippet below is successfully compiled by gcc 4.7.2:<br><br><pre style="margin-left:40px"><code><span>template</span><span> </span><span><</span><span>typename</span><span> T</span><span>,</span><span> </span><span>unsigned</span><span> N</span><span>></span><span>
</span><span>struct</span><span> </span><span>Helper</span><span> </span><span>{};</span><span>

</span><span>template</span><span> </span><span><</span><span>typename</span><span> T</span><span>,</span><span> </span><span>unsigned</span><span> N </span><span>></span><span>
</span><span>Helper</span><span><</span><span> T</span><span>,</span><span> N </span><span>></span><span> </span><span>GetHelper</span><span>()</span><span> </span><span>{</span><span> </span><span>return</span><span> </span><span>Helper</span><span><</span><span> T</span><span>,</span><span> N </span><span>></span><span> </span><span>();</span><span> </span><span>}</span><span>

</span><span>template</span><span> </span><span><</span><span> </span><span>typename</span><span> T</span><span>,</span><span> </span><span>unsigned</span><span> N </span><span>></span><span>
</span><span>struct</span><span> X </span><span>{</span><span>
    X</span><span>(</span><span> </span><span>Helper</span><span><</span><span> T</span><span>,</span><span> N </span><span>></span><span> h </span><span>=</span><span> </span><span>GetHelper</span><span><</span><span>T</span><span>,</span><span> N</span><span>>()</span><span> </span><span>)</span><span> </span><span>{}</span><span>
</span><span>};<br><br></span></code></pre>With clang 3.2 though it spews a lot of errors:<br><br><div style="margin-left:40px"><span style="font-family:times new roman,serif">Compilation finished with errors:<br>
source.cpp:9:40: error: unknown type name 'N'<br>    X( Helper< T, N > h = GetHelper<T, N>() ) {}<br>                                       ^<br>source.cpp:9:41: error: expected ')'<br>    X( Helper< T, N > h = GetHelper<T, N>() ) {}<br>

                                        ^<br>source.cpp:9:6: note: to match this '('<br>    X( Helper< T, N > h = GetHelper<T, N>() ) {}<br>     ^<br>source.cpp:9:38: error: expected '>'<br>

    X( Helper< T, N > h = GetHelper<T, N>() ) {}<br>                                     ^<br>3 errors generated.</span><br></div><br>for the exact position of the carets, you can see: <a href="http://liveworkspace.org/code/3EALA5$27" target="_blank">http://liveworkspace.org/code/3EALA5$27</a><br>

<br>- the first caret is positionned under the N of GetHelper<T, N>()<br>- the second caret is positionned under the > of GetHelper<T, N>()<br>- the fourth caret is positionned under the comma of GetHelper<T, N>()<br>

<br>I suspect a clang bug, given that gcc manages to compile the code.<br><br>Note: related SO question => <a href="http://stackoverflow.com/q/14401308/147192" target="_blank">http://stackoverflow.com/q/14401308/147192</a><br>
<br>-- Matthieu<br>
<br>_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@cs.uiuc.edu">cfe-dev@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><br>
<br></blockquote></div>