[cfe-dev] Value of __cplusplus in GNU modes

Dmitri Shubin sbn at tbricks.com
Tue May 8 09:47:44 PDT 2012


On 04.05.2012 19:21, Chris Jefferson wrote:
> For many years, it was solaris in particular which was holding up GCC 
> defining the correct value for __cplusplus. This has been fixed in gcc 
> by adding a bunch of 'fix includes'. I don't know exactly what the 
> issues were, or how much clang cares about solaris, but that is 
> probably the best place to check issues. Chris

When I tried clang TOT (156374) on Solaris 10 I got error which can be 
shown by the following minimized source:

$ cat -n a.cpp
      1  #include <unistd.h>
      2  #include <stdio.h>
$ ./build-clang/Release/bin/clang++ -c a.cpp
In file included from a.cpp:2:
/usr/include/stdio.h:85:12: error: target of using declaration conflicts 
with declaration already in scope
using std::rename;
            ^
/usr/include/iso/stdio_iso.h:190:12: note: target of using declaration
extern int      rename(const char *, const char *);
                 ^
/usr/include/unistd.h:449:12: note: conflicting declaration
extern int rename(const char *, const char *);
            ^
1 error generated.

This can be minimized even further:

$ cat -n b.cpp
      1  extern "C" {
      2
      3  namespace std {
      4  extern int rename(const char *, const char *);
      5  }
      6
      7  }
      8
      9  using std::rename;
     10
     11  extern "C" {
     12  extern int rename(const char *, const char *);
     13  }
$ ./build-clang/Release/bin/clang++ -c b.cpp
b.cpp:12:12: error: declaration conflicts with target of using 
declaration already in scope
extern int rename(const char *, const char *);
            ^
b.cpp:4:12: note: target of using declaration
extern int rename(const char *, const char *);
            ^
b.cpp:9:12: note: using declaration
using std::rename;
            ^
1 error generated.

Both g++ 4.7 and Sun C++ 5.11 compile it without errors.
Is it clang bug or other compilers are more liberal.



More information about the cfe-dev mailing list