<div dir="auto"><div><div class="gmail_quote"><div dir="ltr">On Fri, 22 Jun 2018, 19:40 Kenneth Camann via cfe-dev, <<a href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">gcc accepts the following, but clang does not:<div><br></div><div>template <typename T></div><div>class Container {</div><div>  class iterator;</div><div><br></div><div>  void method(iterator);</div><div><br></div><div>  void convenienceMethod(iterator n) { method(++n); }</div><div>}</div><div><br></div><div>Clang says that Container::iterator is an incomplete type. The situation seems similar to this: <a href="http://clang.llvm.org/compatibility.html#undep_incomplete" target="_blank" rel="noreferrer">http://clang.llvm.org/compatibility.html#undep_incomplete</a></div><div><br></div><div>except in this case, the type is nested inside the template, which I had hoped would make the method body be ignored until instantiation (as in gcc).<br><br>My understanding is that since Container::iterator is part of the current instantiation, it is not considered a dependent type, so clang is correct by temp.res 8.5.1 and I should not open a bug report.</div><div><br></div><div>...but this is nice syntax when implementing containers, so I hope I am wrong.</div></div></blockquote></div></div><div dir="auto"><br></div><div dir="auto">I'm afraid you're not wrong; this is ill-formed (no diagnostic required). You can work around that by making the type "more dependent". With the recently-approved std::type_identity feature (which is trivial to reimplement for yourself if you don't want to wait for C++20), you can use std::type_identity_t<iterator> to achieve this.</div><div dir="auto"><br></div><div dir="auto"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Thanks,<br>Ken</div></div>
_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@lists.llvm.org" target="_blank" rel="noreferrer">cfe-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev</a><br>
</blockquote></div></div></div>