Selon une règle de définition (ODR) Je ne peux pas avoir une fonctionComment se présente une situation où différentes implémentations d'une fonction inline sont liées dans un exécutable classé?
void function()
{
}
défini plus d'une fois dans un exécutable - éditeur de liens objet. Cependant ODR est ignoré pour les fonctions en ligne:
inline void function()
{
}
peut être défini dans un fichier d'en-tête qui sera #include dans plusieurs fichiers Cpp et donc quand les fichiers résultants sont reliés entre eux l'éditeur de liens voit qu'il y sommes plusieurs instances de cette fonction et ignore intentionnellement cela. Il suppose que c'est la même fonction et utilise simplement l'une des instances. Puisque le comportement du programme est préservé, personne ne s'en soucie. Mais si pour une raison quelconque, use of preprocessor included, ces instances ont des implémentations différentes, l'éditeur de liens choisira à nouveau l'une des fonctions et le développeur ne saura même pas lequel est choisi jusqu'à ce qu'il teste son programme.
Comment cette dernière situation se présente-t-elle lorsque le lieur choisit l'une des fonctions et qu'il a des classifications différentes? Est-ce un comportement indéfini ou tout autre type de situation?
La réponse courte: Broken. – BCS