Я думаю, что это должно работать:
template<class T>
void foo_works(T, EqualityComparable<T> auto);
или эквивалентно:
template<class T, EqualityComparable<T> U>
void foo_works(T,U);
Это будет иметь желаемый эффект, но, как написано, оно не отражает симметриюКонцепция EqualityComparable.
Таким образом, некоторые кодировщики могут предпочесть использовать не сокращенный синтаксис для симметричных ограничений:
template<class T,class U>
requires EqualityComparable<T,U>
void foo_works(T,U);
С концепцией TS есть такая возможность:
EqualityComparable{T,U}
void foo_works(T,U);
Но этот синтаксис напугал консерваторов.