Указывает ли стандарт C ++, что в некоторых случаях компиляция должна завершиться с ошибкой?

Я проверяю стандарт сужающего преобразования, и я думаю, что для сужающего преобразования должна быть вызвана ошибка. Посколькустандарт говорит:

[Примечание: как указано выше, такие преобразования не допускаются на верхнем уровне при инициализации списка. - конец примечания]

Я думаю, что описание «не разрешено» означает, что компиляция не удалась.

Но кто-то сказал мне, чтоВот просто говорит, что «программа плохо сформирована», и стандарт не требует, чтобы компиляция не удалась.

если для преобразования элемента в T требуется сужающее преобразование (см. ниже), программа является некорректной.

Поэтому мой вопрос: указывает ли стандарт, должна ли быть сгенерирована ошибка или предупреждение? Или в некоторых случаях компиляция не удалась? С точки зрения компилятора, можно ли заставить программу компилироваться и просто выдавать некоторые предупреждения?

КСТАТИ:Clang 4.0.0 а такжеGcc 7.0.0 вести себя по-другому.

float a {1.e39}; // Error for both Clang and GCC
double d;
float a3{d};     // Error for Clang, warning for GCC

Ответы на вопрос(5)

Ваш ответ на вопрос