Нет, я уже совсем пизданулся. Нужно построить грамотный operator< для структуры, состоящей из 5 элементов, у каждого из которых определен свой operator<.
Лобовой подход:
paste.org.ru
Написал. Стошнило. Захотелось написать шаблонный бинарный предикат P, принимающий указатель на член структуры где-то в конструкторе и две структуры в operator() и возвращающий member1 != member2 && member1 < member2, а затем написать шаблонный «комбинатор» предикатов, опять на вариадиках, принимающий неограниченное количество бинарных предикатов и две структуры, и делающий pred1 || pred2 || pred3 ...
Тогда искомый код будет записан как, по смыслу (при выполнении очевидных соглашений)
return Combinator<QUrl, QString, QString, QString, QString> (P (&ElementData::PageURL_), P (&ElementData::FormID_), P (&ElementData::Name_), P (&ElementData::Type_), std::less<QString> ()) (left, right);
Блин, какие же плюсы вербозные.