[cfe-dev] [libc++] Is namespace "index" a special kind of a namespace in libc++?

Richard Smith via cfe-dev cfe-dev at lists.llvm.org
Mon Oct 30 16:04:20 PDT 2017


On 30 October 2017 at 07:52, Klemen Forstnerič via cfe-dev <
cfe-dev at lists.llvm.org> wrote:

> Hi Richard,
>
> thanks replying. So if I understood correctly, undefining _GNU_SOURCE and
> defining _ISOC99_SOURCE instead, should be a good fix until this gets
> patched in libc++? :-)
>

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.


> Cheers,
> Klemen
>
> On Sun, Oct 29, 2017 at 11:14 PM, Richard Smith <richard at metafoo.co.uk>
> wrote:
>
>> 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). :-(
>>
>> 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).
>>
>>
>> On 29 October 2017 at 13:14, Richard Smith <richard at metafoo.co.uk> wrote:
>>
>>> There is a ::index function in strings.h on some platforms that might be
>>> leaking into <algorithm>.
>>>
>>> On 29 Oct 2017 13:10, "Klemen Forstnerič via cfe-dev" <
>>> cfe-dev at lists.llvm.org> wrote:
>>>
>>> Hi libc++ developers,
>>>
>>> I'm having a problem compiling the following code:
>>>
>>> Header (index.hpp):
>>>
>>> #ifndef INDEX_HPP_
>>> #define INDEX_HPP_
>>>
>>> #include <algorithm>
>>>
>>> namespace index {
>>>
>>> class Index {
>>>  public:
>>>   Index();
>>> };
>>>
>>> }
>>>
>>> #endif // INDEX_HPP_
>>>
>>> Source (index.cpp):
>>>
>>> #include "index.hpp"
>>>
>>> namespace index {
>>>
>>> Index::Index() {
>>> }
>>>
>>> }
>>>
>>> These are the errors I get:
>>>
>>> index.cpp:5:1: error: use of undeclared identifier 'Index'; did you mean
>>> '::index::Index'?
>>> Index::Index() {
>>> ^~~~~
>>> ::index::Index
>>> ./index.hpp:8:7: note: '::index::Index' declared here
>>> class Index {
>>>       ^
>>> index.cpp:5:8: error: cannot define or redeclare 'Index' here because
>>> namespace 'index' does not enclose namespace 'Index'
>>> Index::Index() {
>>> ~~~~~~~^
>>> 2 errors generated.
>>>
>>> This is my compile command:
>>> clang++ --stdlib=libc++ index.cpp
>>>
>>> clang version:
>>> clang version 5.0.0 (tags/RELEASE_500/final)
>>> Target: x86_64-unknown-linux-gnu
>>> Thread model: posix
>>> InstalledDir: /usr/local/bin
>>>
>>> libc++ version is today's trunk
>>>
>>> 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
>>>
>>>
>>> If I don't include <algorithm> or if I change the name of the namespace
>>> to something other than "index", the code compiles.
>>>
>>> Is this a libc++ bug?
>>>
>>> Cheers,
>>> Klemen
>>>
>>> _______________________________________________
>>> cfe-dev mailing list
>>> cfe-dev at lists.llvm.org
>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>>>
>>>
>>>
>>
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20171030/4a207520/attachment.html>


More information about the cfe-dev mailing list