Pourquoi ce code se compile-t-il?
_Static uint32_t my_arr[2];
_Static_assert(sizeof(my_arr) == 8, "");
_Static_assert(sizeof(my_arr[0]) == 4, "");
_Static_assert(sizeof(my_arr)[0] == 4, "");
Les 2 premières assertions sont évidemment correctes, mais je me serais attendu à ce que la dernière ligne échoue, car je crois comprendre que cela sizeof()
devrait être évalué à un littéral entier, qui ne peut pas être traité comme un tableau. En d'autres termes, il échouerait de la même manière que la ligne suivante échoue:
_Static_assert(4[0] == 4, "");
Fait intéressant, ce qui suit échoue en effet à compiler (ce qui devrait faire la même chose, non?):
_Static_assert(*sizeof(my_arr) == 4, "");
erreur: argument de type non valide d'unaire '*' (avoir 'long unsigned int') _Static_assert (* sizeof (my_arr) == 4, "");
Si cela compte, j'utilise gcc 5.3.0
( sizeof( my_arr ) )[ 0 ]
échec.