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.