This is the mail archive of the libstdc++@gcc.gnu.org mailing list for the libstdc++ project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Decorate C prototypes


tom fogal wrote:
Martin Sebor <sebor@roguewave.com> writes:
Mark Mitchell wrote:
[...]
2. We should verify that the compiler accepts

  extern "C" void abort(void);
  namespace std {
    extern "C" void abort(void) throw();
  }

and:

  namespace std {
    extern "C" void abort(void) throw();
  }
  extern "C" void abort(void);

That's important in case a user explicitly declares the function, or
#include's the C header.
gcc 4.3.1 (the latest I have access to at the moment) does accept
this even though it's ill-formed according to [except.spec], p2:

   If any declaration of a function has an exception-specification,
   all declarations, including the definition and an explicit
   specialization, of that function shall have an exception-
   specification with the same set of type-ids.

Yes, but are those really the same functions? It seems to me like one is `abort' and the other is `std::abort'. Without any sort of using declaration, these are distinct ... no?

They are one and the same function. According to [dcl.link], p6:


    At most one function with a particular name can have C language
    linkage.

Martin


-tom


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]