Macro ARRAYSIZE C ++: comment ça marche?

OK, je ne suis pas entièrement un débutant, mais je ne peux pas dire que je comprends la macro suivante. La partie la plus déroutante est la division de la valeur de fonte à size_t: ce qui sur terre n'est que d'accomplir? Surtout, depuis que je vois un opérateur de négation, qui, autant que je sache, pourrait entraîner une valeur de zéro. Ne ce à dire qu'il peut conduire à une division par zéro? (En passant, la macro est correct et fonctionne à merveille.)

#define ARRAYSIZE(a) \
  ((sizeof(a) / sizeof(*(a))) / \
  static_cast<size_t>(!(sizeof(a) % sizeof(*(a)))))

source d'informationauteur Lajos Nagy