I have this locally as five commits, and plan to upload several PRs when it's actually ready to land.
Duplicates/supersedes the following similar PRs by others:
- D80899 compare_three_way, blocked by lack of three_way_comparable
But does not supersede this one:
- D80902 lexicographical_compare_three_way, blocked by lack of compare_three_way
Should we use std::same_as and std::floating_point concepts instead? Same applies to other uses ofG type traits that are concepts now as well.