История изменений
Исправление kvpfs_2, (текущая версия) :
И в тех случаях, где может быть переполнение, которые фиксируется постфактум, или которое не нужно фиксировать вовсе.
Ну всё это спец кейсы, на которые смотрят под лупой. Гораздо хуже пропустить вот такой микс: «a.get_uint() - b.get_int() + get_uint()». Не место беззнаковым в рутинных, тривиальных кейсах.
В общем идея может и хорошей была, но реальность была с оврагами. Например, вот что в ГЦЦ говорили перестав ронять компиляцию с ошибкой про новую фичу:
The standard only requires that "a conforming implementation shall issue at least one diagnostic message" so compiling the program with a warning is allowed. As Andrew said, -Werror=narrowing allows you to make it an error if you want.
G++ 4.6 gave an error but it was changed to a warning intentionally for 4.7 because many people (myself included) found that narrowing conversions where one of the most commonly encountered problems when trying to compile large C++03 codebases as C++11. Previously well-formed code such as char c[] = { i, 0 }; (where i will only ever be within the range of char) caused errors and had to be changed to char c[] = { (char)i, 0 }
Исправление kvpfs_2, :
И в тех случаях, где может быть переполнение, которые фиксируется постфактум, или которое не нужно фиксировать вовсе.
Ну всё это спец кейсы, на которые смотрят под лупой. Гораздо хуже пропустить вот такой микс: «a.get_uint() - b.get_int() + get_uint()». Не место беззнаковым в рутинных, тривиальных кейсах.
В общем идия может и хорошей была, но реальность была с оврагами. Например, вот что в ГЦЦ говорили перестав ронять компиляцию с ошибкой про новую фичу:
The standard only requires that "a conforming implementation shall issue at least one diagnostic message" so compiling the program with a warning is allowed. As Andrew said, -Werror=narrowing allows you to make it an error if you want.
G++ 4.6 gave an error but it was changed to a warning intentionally for 4.7 because many people (myself included) found that narrowing conversions where one of the most commonly encountered problems when trying to compile large C++03 codebases as C++11. Previously well-formed code such as char c[] = { i, 0 }; (where i will only ever be within the range of char) caused errors and had to be changed to char c[] = { (char)i, 0 }
Исходная версия kvpfs_2, :
И в тех случаях, где может быть переполнение, которые фиксируется постфактум, или которое не нужно фиксировать вовсе.
Ну всё это спец кейсы, на которые смотрять под лупой. Гораздо хуже пропустить вот такой микс: «a.get_uint() - b.get_int() + get_uint()». Не место беззнаковым в рутинных, тривиальных кейсах.
В общем идия может и хорошей была, но реальность была с оврагами. Например, вот что в ГЦЦ говорили перестав ронять компиляцию с ошибкой про новую фичу:
The standard only requires that "a conforming implementation shall issue at least one diagnostic message" so compiling the program with a warning is allowed. As Andrew said, -Werror=narrowing allows you to make it an error if you want.
G++ 4.6 gave an error but it was changed to a warning intentionally for 4.7 because many people (myself included) found that narrowing conversions where one of the most commonly encountered problems when trying to compile large C++03 codebases as C++11. Previously well-formed code such as char c[] = { i, 0 }; (where i will only ever be within the range of char) caused errors and had to be changed to char c[] = { (char)i, 0 }