/// and is used for reduction and move ordering decisions. Gains records the move's
/// best evaluation gain from one ply to the next and is used for pruning decisions.
/// Countermoves store the move that refute a previous one. Entries are stored
/// and is used for reduction and move ordering decisions. Gains records the move's
/// best evaluation gain from one ply to the next and is used for pruning decisions.
/// Countermoves store the move that refute a previous one. Entries are stored
/// different origin but same destination and piece will be considered identical.
template<bool Gain, typename T>
struct Stats {
/// different origin but same destination and piece will be considered identical.
template<bool Gain, typename T>
struct Stats {