Какие гарантии имеет стандарт C ++, когда дело доходит до выдачи диагностических сообщений? - PullRequest
6 голосов
/ 10 июля 2019

При чтении стандарта C ++ часто встречаются обозначения типа «... неправильно сформированы, диагностика не требуется».(Случайный) пример можно найти в 13.8.1 / 17:

Класс S1 :: Inner1 не сформирован, диагностика не требуется, поскольку он не имеет допустимых специализаций.

Где в стандарте можно найти противоположный нормативный язык, который бы предписывал диагностику для плохо сформированной программы?

1 Ответ

7 голосов
/ 10 июля 2019

То, что вы ищете, это [intro.compliance] / 1

Набор диагностируемых правил состоит из всех синтаксических и семантических правил в этом документе, за исключением этих правилсодержит явное примечание, что «диагностика не требуется» или которая описывается как приводящая к «неопределенному поведению».

Затем следует [intro.compliance] / 2

Если программа содержит нарушение какого-либо диагностируемого правила или вхождение конструкции, описанной в этом документе как «условно поддерживаемую», когда реализация не поддерживает эту конструкцию, соответствующая реализация должна выдатьхотя бы одно диагностическое сообщение.

, которое гарантирует, что если вы нарушите одно из диагностируемых правил, вы получите диагностическое сообщение.

...