de acuerdo con una regla de definición (ODR) no puede tener una función¿Cómo es una situación en la que diferentes implementaciones de una función en línea están vinculadas en un ejecutable clasificado?
void function()
{
}
definido más de una vez en un ejecutable - enlazador se opondrá. Sin embargo ODR se ignora para las funciones en línea:
inline void function()
{
}
se puede definir en un archivo de cabecera que será #include en varios archivos .cpp y así, cuando resultantes archivos .obj están unidos entre sí el enlazador ve que hay varios instancias de esa función e intencionalmente ignora eso. Es se supone que es la misma función y simplemente utiliza una de las instancias. Como el comportamiento del programa está preservado, a nadie le importa.
Pero si gracias a cualquier razón, use of preprocessor included, esos casos sucede que tiene diferentes implementaciones del enlazador volverá a escoger una de las funciones y el desarrollador ni siquiera saben cuál es captada hasta que se pone a prueba a fondo su programa.
¿Cómo es la última situación cuando el vinculador elige una de las funciones y tienen diferentes implementaciones clasificadas? ¿Es este comportamiento indefinido o cualquier otro tipo de situación?
La respuesta corta: Broken. – BCS