ARRAYSIZE macro de C ++: ¿cómo funciona?
OK no estoyenteramente un novato, pero no puedo decir que entiendo la siguiente macro. La parte más confusa es la división con valor emitido a size_t: ¿qué demonios logra eso? Especialmente, ya que veo un operador de negación, que, hasta donde yo sé, podría resultar en un valor cero. ¿No significa esto que puede conducir a un error de división por cero? (Por cierto, la macroes correcto y funciona muy bien.)
#define ARRAYSIZE(a) \
((sizeof(a) / sizeof(*(a))) / \
static_cast<size_t>(!(sizeof(a) % sizeof(*(a)))))