Thanks Richard!<br><br>I had not considered the ambiguity and I understand much better why the compiler diagnosis were so off the bat: now it makes sense that it would try to use N as a type and complain.<br><br>The suggested work-around (parentheses) works like a charm.<br>
<br>-- Matthieu<br><br><div class="gmail_quote">On Fri, Jan 18, 2013 at 6:45 PM, Richard Smith <span dir="ltr"><<a href="mailto:richard@metafoo.co.uk" target="_blank">richard@metafoo.co.uk</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<p dir="ltr">See PR13657</p>
<div class="gmail_quote"><div><div class="h5">On 18 Jan 2013 08:37, "Matthieu Monrocq" <<a href="mailto:matthieu.monrocq@gmail.com" target="_blank">matthieu.monrocq@gmail.com</a>> wrote:<br type="attribution">
</div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5">
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></div></div>_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@cs.uiuc.edu" target="_blank">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>
</blockquote></div><br>