This is a more aggressively "modern" approach than my first few attempts.
Apparently we can't just follow the Rule of Zero for the `Ne` matcher in
particular, because if we do, one of the unit tests hits
"recursive template instantiation exceeded maximum depth of 256"
on Clang.
Fixes#1305.