<div dir="ltr">In the latest draft, this is [temp.pre]/10:<div><br></div><div>"""</div><div>A definition of a function template, member function of a class template, variable template, or static data member of a class template shall be reachable from the end of every definition domain (6.3) in which it is implicitly instantiated (13.9.1) unless the corresponding specialization is explicitly instantiated (13.9.2) in some translation unit; no diagnostic is required.<br></div><div>"""</div><div><br></div><div>... which might be slightly easier to read in the pre-C++20 version (without the modules-awareness), where it is [temp]/7:</div><div><br></div><div>"""</div><div>A function template, member function of a class template, variable template, or static data member of a class template shall be defined in every translation unit in which it is implicitly instantiated unless the corresponding specialization is explicitly instantiated in some translation unit; no diagnostic is required.<br></div><div>"""</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, 19 Apr 2020 at 12:00, David Blaikie <<a href="mailto:dblaikie@gmail.com">dblaikie@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Yeah, can't seem to divine the concrete wording here either - perhaps Richard will have a moment to chime in.</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Apr 19, 2020 at 6:10 AM Jaroslav Zeman via cfe-users <<a href="mailto:cfe-users@lists.llvm.org" target="_blank">cfe-users@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">> <br>
> What happens if you change the order of the .cpp files, putting<br>
> template.cpp first; is it stil unresolved?<br>
> <br>
> clang++ -o test template.cpp main.cpp<br>
<br>
The order doesn't matter.<br>
<br>
> I don't believe this code is valid according to C++. I believe it would<br>
> require an explicit instantiation of the ctor/dtor somewhere to make that<br>
> code valid - though I don't have chapter and verse on the spec at hand just<br>
> now to back that up.<br>
<br>
I tried to read the c++ specs, but didn't find anything, that would clearly <br>
state, if this is correct or incorrect. But the specs are too complicated for <br>
me to understand.<br>
<br>
My opinion is that it is bad to rely on implicit instantiation to happen <br>
somewhere and don't do the explicit one. So I've already fixed all these <br>
problems in our code and now I am just curious, what others think about it.<br>
<br>
JZ.<br>
<br>
<br>
<br>
_______________________________________________<br>
cfe-users mailing list<br>
<a href="mailto:cfe-users@lists.llvm.org" target="_blank">cfe-users@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-users" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-users</a><br>
</blockquote></div>
</blockquote></div>