Name mangling
Il compilatore codifica un'intera firma (namespace, classe, tipi dei parametri, qualificatori) in un unico nome di simbolo, perché i linker conoscono solo nomi piatti.
È il meccanismo che rende possibile l'overloading: f(int) e f(double) diventano due simboli distinti e possono coesistere. Le conseguenze pratiche sono due. Primo, la codifica dipende dal compilatore e fa parte dell'interfaccia binaria: per questo i file oggetto di compilatori incompatibili non si possono collegare, e per questo la divisione del tipo stringa in libstdc++ ha prodotto per anni incomprensibili errori di simboli mancanti. Secondo, extern "C" disattiva il mangling e produce un nome semplice, indispensabile per tutto ciò che deve essere chiamato da C o cercato dinamicamente a runtime. Gli strumenti c++filt e nm -C traducono il percorso inverso, ed è così che si legge davvero un errore del linker.