Правильно сформированная программа может иметь неопределенное поведение.
Это указано в примечании и, следовательно, не является технически авторитетным, но кажется, что это намерение, чтобы прекращение компиляции (или «перевод» как стандартные вызовы it) находится в пределах возможного UB:
[intro.defs]
undefined поведение
поведение, для которого этот документ не налагает требований [Примечание. Неопределенное поведение может ожидаться, если в этом документе отсутствует какое-либо явное определение поведения или когда программа использует ошибочную конструкцию или ошибочные данные.
Допустимое неопределенное поведение варьируется от полного игнорирования ситуации с непредсказуемыми результатами до поведения во время трансляции или выполнения программы задокументированным образом c среды (с выдачей сообщения диагностики c или без него), до завершения перевода или выполнения (с выдачей диагностического сообщения c message).
Многие ошибочные программные конструкции не вызывают неопределенного поведения; они должны быть диагностированы.
Оценка константного выражения никогда не показывает поведение, явно заданное как undefined в [intro] - [cpp] этого документа ([expr.const]). - конечное примечание]
Существуют также практические ограничения для реализации:
[выполняет]
Поскольку компьютеры конечны, реализации C ++ неизбежно ограничены размером программ, которые они могут успешно обрабатывать. Каждая реализация должна документировать эти ограничения, если они известны. В этой документации могут быть указаны фиксированные ограничения там, где они существуют, например, как вычислить пределы переменных в зависимости от доступных ресурсов, или указано, что фиксированные ограничения не существуют или неизвестны.
Более того, в компиляторах могут быть и есть ошибки. Правильно сформированный просто означает, что компилятор, соответствующий стандарту, должен его скомпилировать (с учетом ограничений, упомянутых выше). Компилятор с ошибками не обязательно соответствует стандарту.
Наконец, сам стандартный документ не идеален . Если есть разногласия по поводу того, что означают правила, то программа может быть правильно сформированной при одной интерпретации и плохо сформированной при другой интерпретации.
Если компилятор не согласен с программистом или другим компилятором , то он может не скомпилировать программу, которая, как полагает другая сторона, правильно сформирована.