Потому что тип объявленной переменной и имя типа это не одно и то же. Потому что синтаксически объявление имеет структуру
я знаю.
то ты и получишь переменные разных типов, потому что у них разные деклараторы.
я с этим не спорил.
Речь идёт о том, что синтаксически лучше было-бы сделать что-бы декларатор была-бы один. Т.е. сначала пишу что мне нужно, const, static, pointer… А потом список имён.
Или просто в одной декларации одну переменную, всё равно переменные ИМХО нужно декларивать по мере необходимости.
То, что преобразования типов могут вести к потере данных, хорошо известно.
AFAIK такой каст где угодно может привести к чему угодно. На amd64 к потере данных(если указатель в int и обратно), а потом, при использовании указателя, у вас точно UB будет.