diff options
author | Giuseppe D'Angelo <giuseppe.dangelo@kdab.com> | 2020-02-15 00:11:22 +0100 |
---|---|---|
committer | Giuseppe D'Angelo <giuseppe.dangelo@kdab.com> | 2020-06-10 16:49:08 +0200 |
commit | 8e98a161e993c6636d217276a0f2373d642ff050 (patch) | |
tree | 23adce823bfab9795cf7b775d35f14be7baedc10 /src/opengl | |
parent | ce5931aaf2c9698925366e787d08747a1c60c378 (diff) |
Long live std::pair!
Make QPair an alias for std::pair, and qMakePair just a forwarder
towards std::make_pair.
Why? Fundamentally to ditch a bunch of NIH code; gain for free
structured bindings, std::tuple and std::reference_wrapper
compatibility, and so on.
Breakages:
* Some that code manually forward declares QPair.
We don't care about it (<QContainerFwd> is the proper way).
* Some code that overloads on std::pair and QPair. Luckily
it's mostly centralized: debug, metatypes, testing macros.
Just remove the QPair overload.
* Usages of qMakePair forcing the template type parameters.
There are a handful of these in qtbase, but only one was actually
broken.
* std::pair is NOT (and will never likely be) trivially copiable.
This is agreed to be a mistake done by practically all implementations
in C++11, can can't be fixed without breaking ABI.
Some code using QPair assuming it's trivially copiable may break;
exactly one occurrence was in qtbase.
* QMetaType logic extracts the type names in two different ways,
one by looking at the source code string (e.g. extracted by moc)
and one via some ad-hoc reflection in C++. We need to make
"QPair" (as spelled in the source code) be the same as "std::pair"
(gathered via reflection, which will see through the alias)
when compared. The way it's already done e.g. for QList is
by actually replacing the moc-extracted name with the name
of the actual type used in C++; do the same here.
On libc++, std::pair is actually in an inline namespace --
i.e. std::__1::pair; the reflection will extract and store
"std::__1::pair" so we need an ad-hoc fix to QMetaType.
[ChangeLog][QtCore][QPair] QPair is now an alias to std::pair,
and does not exist as a class in Qt any more. This may break
code such as functions overloaded for both QPair and std::pair.
Usually, the overload taking a QPair can be safely discarded,
leaving only the one taking a std::pair. QPair API has not changed,
and qMakePair is still available for compatibility (although
new code is encouraged to use std::pair and std::make_pair
directly instead).
Change-Id: I7725c751bf23946cde577b1406e86a336c0a3dcf
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'src/opengl')
-rw-r--r-- | src/opengl/qopengltimerquery.cpp | 8 | ||||
-rw-r--r-- | src/opengl/qopenglvertexarrayobject.cpp | 2 |
2 files changed, 5 insertions, 5 deletions
diff --git a/src/opengl/qopengltimerquery.cpp b/src/opengl/qopengltimerquery.cpp index 44955d48fc..d5ef875efa 100644 --- a/src/opengl/qopengltimerquery.cpp +++ b/src/opengl/qopengltimerquery.cpp @@ -143,11 +143,11 @@ bool QOpenGLTimerQueryPrivate::create() // Check to see if we also need to resolve the functions for EXT_timer_query QSurfaceFormat f = context->format(); - if (f.version() <= qMakePair<int, int>(3, 2) + if (f.version() <= qMakePair(3, 2) && !context->hasExtension(QByteArrayLiteral("GL_ARB_timer_query")) && context->hasExtension(QByteArrayLiteral("GL_EXT_timer_query"))) { ext = new QExtTimerQueryHelper(context); - } else if (f.version() <= qMakePair<int, int>(3, 2) + } else if (f.version() <= qMakePair(3, 2) && !context->hasExtension(QByteArrayLiteral("GL_ARB_timer_query")) && !context->hasExtension(QByteArrayLiteral("GL_EXT_timer_query"))) { qWarning("QOpenGLTimerQuery requires one of:\n" @@ -530,11 +530,11 @@ bool QOpenGLTimeMonitorPrivate::create() // Check to see if we also need to resolve the functions for EXT_timer_query QSurfaceFormat f = context->format(); - if (f.version() <= qMakePair<int, int>(3, 2) + if (f.version() <= qMakePair(3, 2) && !context->hasExtension(QByteArrayLiteral("GL_ARB_timer_query")) && context->hasExtension(QByteArrayLiteral("GL_EXT_timer_query"))) { ext = new QExtTimerQueryHelper(context); - } else if (f.version() <= qMakePair<int, int>(3, 2) + } else if (f.version() <= qMakePair(3, 2) && !context->hasExtension(QByteArrayLiteral("GL_ARB_timer_query")) && !context->hasExtension(QByteArrayLiteral("GL_EXT_timer_query"))) { qWarning("QOpenGLTimeMonitor requires one of:\n" diff --git a/src/opengl/qopenglvertexarrayobject.cpp b/src/opengl/qopenglvertexarrayobject.cpp index 7f28a0bc61..44a0640567 100644 --- a/src/opengl/qopenglvertexarrayobject.cpp +++ b/src/opengl/qopenglvertexarrayobject.cpp @@ -176,7 +176,7 @@ bool QOpenGLVertexArrayObjectPrivate::create() vaoFuncsType = NotSupported; QSurfaceFormat format = ctx->format(); #if !QT_CONFIG(opengles2) - if (format.version() >= qMakePair<int, int>(3,2)) { + if (format.version() >= qMakePair(3,2)) { vaoFuncs.core_3_2 = QOpenGLVersionFunctionsFactory::get<QOpenGLFunctions_3_2_Core>(ctx); vaoFuncsType = Core_3_2; vaoFuncs.core_3_2->glGenVertexArrays(1, &vao); |