The tests for std::error_code comparisons assumed that a default constructed object uses std::generic_category(). That's true for a default constructed std::error_condition, but not std::error_code. Fix the three-way comparisons to correctly depend on the result of comparing the categories, and add another test for comparing two objects with the same category and different values. libstdc++-v3/ChangeLog: * testsuite/19_diagnostics/error_code/operators/not_equal.cc: Add comparison with same category and different values. * testsuite/19_diagnostics/error_code/operators/less.cc: Likewise. Fix comparison involving different categories. * testsuite/19_diagnostics/error_code/operators/three_way.cc: Likewise. * testsuite/19_diagnostics/error_condition/operators/less.cc: Add comment. * testsuite/19_diagnostics/error_condition/operators/three_way.cc: Likewise. Tested x86_64-linux. Committed to trunk.