<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On 31 October 2017 at 05:00, Klemen Forstnerič via cfe-dev <span dir="ltr"><<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Thanks for your reply. When I try to build my previously posted example (index.hpp and index.cpp) with the flags "-U_GNU_SOURCE -D<span style="font-size:12.8px">_ISOC99_<wbr>SOURCE</span>" it works, but when I try it on my production code, I get random errors in all sorts of places. Having tried that, is there anything else I can do, besides renaming my namespace index to something else? <div><br></div><div>Should I have rebuilt libc++ itself with those flags instead of my code?</div></div></blockquote><div><br></div><div>No, you did the right thing. Most likely either your code or one of your dependencies (maybe even libc++) depends on an extension that's disabled by -U_GNU_SOURCE. If you can figure out which one, you should be able to re-enable that extension with the relevant *_SOURCE macro.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div>I should note, though, using the command "clang++ index.cpp" (which uses the system's libstdc++ 4.8) to build my previously posted example, doesn't require me to undefine _GNU_SOURCE and define <span style="font-size:12.8px">_ISOC99_SOURCE</span> to make it compile. What does libstdc++ do differently than libc++?</div></div></div></blockquote><div><br></div><div>Its <algorithm> header presumably has a different set of #includes.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Thanks again.</div></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Oct 31, 2017 at 12:04 AM, 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"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><span>On 30 October 2017 at 07:52, Klemen Forstnerič via cfe-dev <span dir="ltr"><<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hi Richard,<div><br></div><div>thanks replying. So if I understood correctly, undefining <span style="font-size:12.8px">_GNU_SOURCE and defining </span><span style="font-size:12.8px">_ISOC99_SOURCE instead, should be a good fix until this gets patched in libc++? :-)</span></div></div></blockquote><div><br></div></span><div>There's nothing that libc++ can do about it; the 'index' function is coming from your libc implementation. But yes, undefining _GNU_SOURCE and defining _ISOC99_SOURCE (and maybe also _ISOC11_SOURCE) should probably work.</div><div><div class="m_8202980235934701741h5"><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><span style="font-size:12.8px">Cheers,</span></div><div><span style="font-size:12.8px">Klemen</span></div></div><div class="m_8202980235934701741m_2160898226881508473HOEnZb"><div class="m_8202980235934701741m_2160898226881508473h5"><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Oct 29, 2017 at 11:14 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"><div dir="ltr">Looks like glibc provides it in <string.h> too if _GNU_SOURCE is defined, which it *always* is when compiling in C++ mode (unless explicitly undefined). :-(<div><br></div><div>Is it still the case that glibc requires _GNU_SOURCE to be defined in order for it to provide the symbols that C++ compilation requires? A quick test seems to show that _ISOC99_SOURCE (or sometimes _ISOC11_SOURCE) is actually sufficient. Perhaps we should provide a mode that doesn't define _GNU_SOURCE (ideally, -std=c++XX would have that effect, but that's probably going to break too much).<div><div class="m_8202980235934701741m_2160898226881508473m_738288291250290573h5"><br><div class="gmail_extra"><br><div class="gmail_quote">On 29 October 2017 at 13:14, 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:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="auto">There is a ::index function in strings.h on some platforms that might be leaking into <algorithm>.</div><div class="gmail_extra"><br><div class="gmail_quote"><div><div class="m_8202980235934701741m_2160898226881508473m_738288291250290573m_-5112230085990606833gmail-m_-7009765878538134777h5">On 29 Oct 2017 13:10, "Klemen Forstnerič via cfe-dev" <<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>> wrote:<br type="attribution"></div></div><blockquote class="m_8202980235934701741m_2160898226881508473m_738288291250290573m_-5112230085990606833gmail-m_-7009765878538134777m_-6768994868977416032quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><div class="m_8202980235934701741m_2160898226881508473m_738288291250290573m_-5112230085990606833gmail-m_-7009765878538134777h5"><div dir="ltr">Hi libc++ developers,<div><br></div><div>I'm having a problem compiling the following code:</div><div><br></div><div>Header (index.hpp):</div><div><br></div><div><div><font face="monospace, monospace">#ifndef INDEX_HPP_</font></div><div><font face="monospace, monospace">#define INDEX_HPP_</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">#include <algorithm></font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">namespace index {</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">class Index {</font></div><div><font face="monospace, monospace"> public:</font></div><div><font face="monospace, monospace">  Index();</font></div><div><font face="monospace, monospace">};</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">}</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">#endif // INDEX_HPP_</font></div></div><div><br></div><div>Source (index.cpp):</div><div><br></div><div><div><font face="monospace, monospace">#include "index.hpp"</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">namespace index {</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">Index::Index() {</font></div><div><font face="monospace, monospace">}</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">}</font></div></div><div><br></div><div>These are the errors I get:</div><div><br></div><div><div><font face="monospace, monospace">index.cpp:5:1: error: use of undeclared identifier 'Index'; did you mean '::index::Index'?</font></div><div><font face="monospace, monospace">Index::Index() {</font></div><div><font face="monospace, monospace">^~~~~</font></div><div><font face="monospace, monospace">::index::Index</font></div><div><font face="monospace, monospace">./index.hpp:8:7: note: '::index::Index' declared here</font></div><div><font face="monospace, monospace">class Index {</font></div><div><font face="monospace, monospace">      ^</font></div><div><font face="monospace, monospace">index.cpp:5:8: error: cannot define or redeclare 'Index' here because namespace 'index' does not enclose namespace 'Index'</font></div><div><font face="monospace, monospace">Index::Index() {</font></div><div><font face="monospace, monospace">~~~~~~~^</font></div><div><font face="monospace, monospace">2 errors generated.</font></div></div><div><br></div><div>This is my compile command:</div><div><font face="monospace, monospace">clang++ --stdlib=libc++ index.cpp</font><br></div><div><br></div><div>clang version:</div><div><div><font face="monospace, monospace">clang version 5.0.0 (tags/RELEASE_500/final)</font></div><div><font face="monospace, monospace">Target: x86_64-unknown-linux-gnu</font></div><div><font face="monospace, monospace">Thread model: posix</font></div><div><font face="monospace, monospace">InstalledDir: /usr/local/bin</font></div></div><div><br></div><div>libc++ version is today's trunk</div><div><br></div><div>System: Linux trusty64 3.16.0-55-generic #74~14.04.1-Ubuntu SMP Tue Nov 17 10:15:59 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux</div><div><br></div><div><br></div><div>If I don't include <algorithm> or if I change the name of the namespace to something other than "index", the code compiles.</div><div><br></div><div>Is this a libc++ bug?</div><div><br></div><div>Cheers,</div><div>Klemen</div></div>
<br></div></div>______________________________<wbr>_________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/cfe-dev</a><br>
<br></blockquote></div><br></div>
</blockquote></div><br></div></div></div></div></div>
</blockquote></div><br></div>
</div></div><br>______________________________<wbr>_________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/cfe-dev</a><br>
<br></blockquote></div></div></div><br></div></div>
</blockquote></div><br></div>
</div></div><br>______________________________<wbr>_________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/cfe-dev</a><br>
<br></blockquote></div><br></div></div>