Workaround MSVC2008 build failure after switching to std::upper_bound
authorGiuseppe D'Angelo <giuseppe.dangelo@kdab.com>
Thu, 20 Sep 2012 16:32:37 +0000 (18:32 +0200)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Thu, 27 Sep 2012 13:47:16 +0000 (15:47 +0200)
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>
src/corelib/thread/qthread_p.h

index 4878d59..0667a81 100644 (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);
         }
     }