Specificamente utilizzando g ++ su linux, esiste un modo per determinare quale funzione di overload o modello è stata scelta per una particolare istruzione?il compilatore può dirmi quale funzione di sovraccarico o modello ha scelto?
In particolare, non presumo che io conosca necessariamente tutte le possibili scelte, che possono essere nei file di intestazione provenienti da varie librerie. E anche se l'avessi fatto, non presumo che avrei potuto modificare il codice pertinente.
http://stackoverflow.com/questions/1496497/how-can-i-see-parse-tree-intermediate-code-optimization-code-and-assembly-code potrebbe essere utile - per esempio, guarda i passaggi intermedi del compilatore. Se vuoi farlo una sola volta, puoi guardare i file oggetto generati e magari attaccare una chiamata alla funzione "marker" che circonda la chiamata che vuoi capire. Il file oggetto indicherà quale sia il nome simbolico della funzione chiamata, che può essere revered nella firma della funzione (che dovrebbe essere unica) che hai chiamato. – Yakk
Ho spesso detto che ciò di cui abbiamo bisogno è un debugger in fase di compilazione, in modo che tu possa passare attraverso le istanze dei template mentre vengono valutati, osservando gli argomenti del template, ecc., Per vedere cosa sta realmente accadendo. –
Quando dici * vedi *, cosa intendi esattamente? Clang è noto per la produzione di un AST completamente formato per C++, tuttavia è necessario scrivere un programma attorno alle sue librerie per poter "vedere". –