"Inlining" e "Simboli duplicati" sono cose diverse. Il inline
Le parole chiave consentono esplicitamente più definizioni (cioè ti esonera dalla regola a una definizione), quindi la piattaforma (compilatore e linker) deve sapere come gestire e deduplicare questo.
(Questo accade continuamente per le funzioni dei membri della classe definiti nelle intestazioni.)
Se vuoi solo generazione di codice Per accadere, puoi archiviare l'indirizzo della funzione da qualche parte:
auto fp = my_inline;
In questo modo il compilatore deve generare una definizione della funzione, in modo da essere in grado di dargli un indirizzo. Ma anche se lo fai in ogni unità di traduzione, non riceverai un errore di linker, poiché questo verrà deduplicato al momento del collegamento. Il requisito che tutte le definizioni siano identiche si assicura che ciò sia ben definito.