I template C++ devono essere istanziati dal compilatore al momento dell'uso: posizionare la definizione del template in un file .cpp separato impedisce agli altri moduli di istanziarlo a meno di usare l'esplicita istanziazione.
TEMPLATE_CPP_UNDEF_REF
→
Il linker MSVC fallisce la risoluzione del nome decorato (name mangling): la firma del metodo dichiarata nel file .h differisce nei tipi, nei qualificatori 'const' o nella convenzione di chiamata dall'implementazione nel file .cpp.
LNK2019_MANGLED
→
Quando si compila con '-fvisibility=hidden', i simboli RTTI (typeinfo) delle classi non esportate esplicitamente con '__attribute__((visibility("default")))' non vengono unificati tra eseguibile e .so, facendo fallire silenziosamente tutti i dynamic_cast polimorfici.
VISIBILITY_HIDDEN_TYPEINFO
→
Se una classe di eccezione personalizzata ha visibilità nascosta ('-fvisibility=hidden'), la tabella RTTI non viene unificata tra librerie .so differenti: il blocco 'catch (const MyException&)' non riconosce l'eccezione lanciata e il programma abortisce con std::terminate.
HIDDEN_VISIBILITY_INLINE_VTABLE
→