Just random minor stuff I found while browsing the code.

I added a line
KingDanger[0][0] = KingDanger[1][0] = SCORE_ZERO;
to Eval::init() because I don't see it explicitly initialized anywhere and we do read from those locations later.
Maybe there is some default init mechanism(I'm not aware of) that sets it to 0 for us in which case it's unnecessary?

Feel free to take or ignore anything you like.