Una regla de definición en c ++

De acuerdo con el estándar c ++:

Ninguna unidad de traducción contendrá más de una definición de variable, función, tipo de clase, tipo de enumeración o plantilla.

//--translation_unit.cpp--//
int a;

void foo()
{
    int a; //Second defention of a. ODR fails.
}

¿Me puede explicar cómo funciona ODR en realidad?

Respuestas a la pregunta(4)

Su respuesta a la pregunta