Sur this page concernant une certaine structure Winsock, l'exemple semble prendre l'adresse d'une structure et convertir le pointeur en un pointeur vers une structure complètement différente.Aliasing strict C++: cet exemple MSFT n'est-il pas UB?
SOCKET ListenSocket;
struct sockaddr_in saServer;
// Bind the listening socket using the information in the sockaddr structure
bind(ListenSocket,(SOCKADDR*) &saServer, sizeof(saServer));
Voici les déclarations pour les deux structures. C'est un comportement techniquement indéfini, correct?
struct sockaddr {
ushort sa_family;
char sa_data[14];
};
struct sockaddr_in {
short sin_family;
u_short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};
Les jetons de pointeur ne transgressent jamais la stricte règle d'aliasing (il semble que ce soit une idée fausse commune) –
@MM, mais sûrement l'implémentation de 'bind' va devoir déférencer ce pointeur, et au point * que vous violez la règle stricte d'aliasing, non? (J'ai la vague impression que vous pouvez être sauvé par le fait que le seul élément de la structure étant lu par l'alias est au début de la structure et est commun aux deux, mais il n'est pas du tout évident pour moi que cela est vrai du point de vue langue avocat) –
implémentations bibliothèque @HarryJohnston ne sont pas soumis à des règles ISO C++, ils pourraient même ne pas être écrites en C++ –