В теории можно было бы просто сделать так:
template <class T>
using std::hash<std::string<T>> = std::hash<std::basic_string<T>>;
ведь по стандарту всё равно гарантируется их эквивалентность, а прием по ссылке и по string_view не то чтобы сильно отличается с точки зрения перфа
А если у меня ембеддед и свой класс строки, использующий adt, а не исключения, то что мне делать? Страдать? Или опять перерисывать половину stl?
Нет уж. По нормальному - это действительно шаблонная библиотека. Где std::string не захордкорен, и можно положить то, что надо.