Это зависит от того, хотите ли вы использовать <
для примитива сравнения или хотите потребовать <=>
.
Если первое:
template <typename Key>
requires std::strict_weak_order<std::less<Key>, Key const&, Key const&>
class Map;
Если второе:
template <std::three_way_comparable<std::weak_ordering> Key>
class Map;
Оба они будут выполнять синтаксические c проверки во время компиляции, но также налагают семанти c проверку того, что рассматриваемый порядок является строгим слабым порядком (на самом деле я полагаю, что это технически отсутствует в weak_ordering
формулировка, но она должна быть там ...)