extern(C++) and shared

Martin Nowak dawg at dawgfoto.de
Mon Nov 28 02:34:04 PST 2011


On Sun, 27 Nov 2011 16:03:55 +0100, deadalnix <deadalnix at gmail.com> wrote:

> Le 27/11/2011 01:20, deadalnix a écrit :
>> I have this function :
>> extern(C++) void* __dsfml_start_thread(EntryPoint entryPoint, void*
>> userData);
>>
>> If EntryPoint is defined as follow :
>> alias extern(C++) void* function(void*) EntryPoint;
>>
>> The function mangle in _Z20__dsfml_start_threadPFPvS_ES_
>>
>> if alias extern(C++) void* function(shared void*) EntryPoint;
>> _Z20__dsfml_start_threadPFPvPvES_
>>
>> Both demangle using c++filt in __dsfml_start_thread(void* (*)(void*),
>> void*), which is what is expected.
>>
>> But the definition without shared will be the only one to link
>> successfully.
>>
>> Is the mangling of shared types is consistent in C++ ? shared doesn't
>> exists in C++, so I guess we should expect the same mangling in both
>> cases. Unless it exists some magic on the C++ side that I'm not aware  
>> of ?
>
> According to this document :  
> http://www.scribd.com/doc/57293807/18/Gnu3-name-mangling S_ is used for  
> template parameters, which is not correct here.

Thanks.
http://d.puremagic.com/issues/show_bug.cgi?id=7024


More information about the Digitalmars-d mailing list