Например, знаменитые слова (§3.2/1)
Никакая единица перевода не должна содержать более одного определения любой переменной, функции, типа класса, перечисления тип или шаблон.
Я считаю, что требования "должны" интерпретироваться так, как будто они неявно следуют "иначе программа плохо сформирована", если не указано иное. Однако другие утверждают, что вместо этого "означает" означает "иначе поведение undefined".
В каждом случае я встречался в стандарте, в котором требование "нужно" не сопровождалось чем-то вроде "иначе поведение undefined" или "без необходимости диагностики", правило, в котором оно произошло, было одним который, очевидно, диагностируется и диагностируется всеми компиляторами, которых я знаю (приведенный выше абзац является примером). Поэтому я считаю, что это означает "в противном случае программа плохо сформирована", т.е. Требуется диагностика.
Во всяком случае, это только мои мысли. Я был бы признателен за авторитетный ответ.