Здравствуйте. Я тут недавно ковырялся с сокетами и столкнулся с такой ерундой: при передачи ipv4 сокета в байнд, необходимо выполнить преобразование из sockaddr_in* в sockaddr*
bind(sfd, (struct sockaddr *) &my_addr, sizeof(struct sockaddr_in))
Но ведь это не говнокод какой-то, на что рассчитывал тот, кто это писал? Предположу, что расчётат на размещение bind в отдельном модуле (не допустить инлайна), следовательно не оставить ничего в регистрах перед вызовом. Что думаете? Конечно, можно не париться так сильно, ведь в документации в bind такой каст производится.
А вот пример из stl (на cppreference подобная техника демонстрируется, правда для <char>):
wifstream f("file");
double val;
f.read((wchar_t*)&val, 1);
К чему вообще так жёстко связывать ограничениями без предоставления простых обходных путей, что даже для реализации базовых компонентов эти правила активно нарушаются.