Decorate C prototypes
Martin Sebor
sebor@roguewave.com
Fri May 1 18:02:00 GMT 2009
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
More information about the Libstdc++
mailing list