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

Klemen Forstnerič via cfe-dev cfe-dev at lists.llvm.org
Mon Oct 30 07:52:40 PDT 2017


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++? :-)

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
>>
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20171030/319b9102/attachment.html>


More information about the cfe-dev mailing list