https://gcc.godbolt.org/z/58rn3vWo8 — gcc
https://gcc.godbolt.org/z/b85afvPn6 — clang
struct Foo {
Foo(const char*, unsigned int) {}
};
int main() {
unsigned long l = 0;
Foo f("ahaha", l); // тут всё ок
Foo g{"ahaha", l};
// gcc --- warning: narrowing conversion of 'l' from 'long unsigned int' to 'unsigned int' [-Wnarrowing]
// clang --- error: non-constant-expression cannot be narrowed from type 'unsigned long' to 'unsigned int' in initializer list [-Wc++11-narrowing]
}
Я чот туплю. Да, сужение типа — это плохо (хотя в боевом коде я сделаю статик-каст, потому что мамой клянус, там меньше 4 гигов), но почему в ()-конструкторе компиляторы съели молча, а в {}-конструкторе стали ругаться? Да ещё и с разными уровнями критичности, при том, что я никому из них не сказал -Werror.