On Linux g++/clang++
void test10058l(void*(*)(void*),void*(*)(const void*),const void*(*)(void*));
is mangled as _Z10test10058lPFPvS_EPFS_PKvEPFS3_S_E
- According to g++/clang++, how many symbols are there in this function definition ?
- What are the substitutions ? (
S_
,S0_
,S1_
, ...) - More specifically what is
S3_
?
(edit - adding some context)
The D language allows to interact with C++ by declaring symbols as extern(C++)
.
Unfortunately the current implementation is not always correct - I'm trying to fix it by implementing the current g++/clang++ name mangling scheme as defined by the Itanium C++ ABI.
Since this documentation is not crystal clear, I'm having a hard time understanding what accounts as a symbol.