std::type_index имеет оператор меньше чем, который должен использовать std::type_info, но std::type_info имеет оператор не меньше чем.
std::type_index
std::type_info
Так как же std::type_index может иметь оператор меньше чем?
https://en.cppreference.com/w/cpp/types/type_index
Документация для оператора сравнения гласит:
Сравнивает базовые объекты std :: type_info в соответствии с определенным реализацией порядком. Сравнение выполняется с помощью type_info :: before .
Вы найдете объяснение в статье об операторах сравнения здесь . tl; dr: std::type_info имеет функцию-член before, которая используется и имеет определенный порядок реализации между типами.
before