diff options
Diffstat (limited to 'src/concurrent/qtconcurrentmedian.h')
-rw-r--r-- | src/concurrent/qtconcurrentmedian.h | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/src/concurrent/qtconcurrentmedian.h b/src/concurrent/qtconcurrentmedian.h index b39b3ed32b..ce2afb9c28 100644 --- a/src/concurrent/qtconcurrentmedian.h +++ b/src/concurrent/qtconcurrentmedian.h @@ -102,10 +102,19 @@ public: { if (dirty) { dirty = false; + +// This is a workaround for http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58800 +// Avoid using std::nth_element for stdlibc++ <= 4.7.3 || (>= 4.8.0 && <= 4.8.2) +#if defined(__GLIBCXX__) && (__GLIBCXX__ <= 20130411 || (__GLIBCXX__ >= 20130322 && __GLIBCXX__ <= 20131016)) + QVector<T> sorted = values; + std::sort(sorted.begin(), sorted.end()); + currentMedian = sorted.at(bufferSize / 2); +#else QVector<T> copy = values; typename QVector<T>::iterator begin = copy.begin(), mid = copy.begin() + bufferSize/2, end = copy.end(); std::nth_element(begin, mid, end); currentMedian = *mid; +#endif } return currentMedian; } |