const std::complex<zero> zero(0);
と
#define ZERO std::complex<double>(0)
はエライちがいじゃないか。