Я проверяю стандарт о сужении преобразования, и я думаю, что для сужения конверсии должна быть вызвана ошибка. Поскольку стандарт говорит:
[Примечание. Как указано выше, такие преобразования не допускаются на верхнем уровне в инициализации списка. - конечная нота]
Я думаю, что описание "не разрешено" означает, что компиляция должна завершиться неудачей.
Но кто-то сказал мне, что здесь просто говорит, что "программа плохо сформирована", и стандарт не требует, чтобы компиляция должна потерпеть неудачу.
если требуется преобразование сужения (см. ниже) для преобразования элемент в T, программа плохо сформирована.
Итак, мой вопрос: определяет ли стандарт, следует ли генерировать ошибку или предупреждение? Или в некоторых случаях компиляция должна завершиться неудачей? С точки зрения компилятора, хорошо ли сделать компиляцию программы и просто дать некоторые предупреждения?
BTW: 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