Workaround MSVC2008 build failure after switching to std::upper_bound

QPostEventList is kept sorted by priority; std::upper_bound
is used to insert a QPostEvent in the right place in the list.

Turns out that MSVC2008 is a bit too picky and tries to see if the
list is actually ordered. This causes a build failure as there is
no operator< defined between two QPostEvents (in fact,
an integer -- the priority -- is passed to std::upper_bound).

Work around this issue by defining operator< between two QPostEvents.

Change-Id: Ie3562dd0cc7253e25fc988b25d566d9d9e9fe62b
Reviewed-by: Andreas Holzammer <andreas.holzammer@kdab.com>
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
bb10
Giuseppe D'Angelo 2012-09-20 18:32:37 +02:00 committed by The Qt Project
parent 0e3b1f4b48
commit 60e2ec9db4
1 changed files with 3 additions and 7 deletions

View File

@ -86,13 +86,9 @@ public:
};
Q_DECLARE_TYPEINFO(QPostEvent, Q_MOVABLE_TYPE);
inline bool operator<(int priority, const QPostEvent &pe)
inline bool operator<(const QPostEvent &first, const QPostEvent &second)
{
return pe.priority < priority;
}
inline bool operator<(const QPostEvent &pe, int priority)
{
return priority < pe.priority;
return first.priority > second.priority;
}
// This class holds the list of posted events.
@ -126,7 +122,7 @@ public:
// insert event in descending priority order, using upper
// bound for a given priority (to ensure proper ordering
// of events with the same priority)
QPostEventList::iterator at = std::upper_bound(begin() + insertionOffset, end(), priority);
QPostEventList::iterator at = std::upper_bound(begin() + insertionOffset, end(), ev);
insert(at, ev);
}
}