В языке программирования C ++, 3-е издание , приложение C.6, а именно «Неявное преобразование типов», Бьярн Страуструп классифицирует преобразования как повышения и преобразования : первые «сохраняют значения» (это ваш случай 2), вторые - нет (случай 1).
О преобразованиях , он говорит, что "фундаментальные типы могут быть преобразованы друг в друга изумительным числом способов. На мой взгляд, слишком много преобразований разрешено". и «Компилятор может предупредить о многих сомнительных преобразованиях. К счастью, многие компиляторы действительно делают это».
акции с другой стороны безопасны, и похоже, что компилятор не должен предупреждать их.
Предупреждения компилятора обычно не являются обязательными. Обычно в черновиках C ++ и окончательных документах ANSI сообщается, что "разработчики должны выдавать предупреждение", где это предлагается: вы можете проверить его самостоятельно для получения дополнительной информации, если это необходимо.
РЕДАКТИРОВАНИЕ: добавлено примечание C ++ 11:
В Язык программирования C ++, 4-е издание , приложение к 3-му изданию было сообщено и расширено как раздел 10.5, «Неявное преобразование типов».
Исходя из прежних соображений, C ++ 11 более точно определяет «сужающие преобразования» и добавляет нотацию {} -initializer (6.3.5), с помощью которой усечения приводят к ошибке компиляции.