From 96d03949d24a4b2af630b30050d5deee8ea938dd Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Tue, 16 Jan 2024 08:45:27 -0800 Subject: [PATCH] QNetworkRequest: export the static constexpr (inline) member variables MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit All that is required is that we write the declaration as if they weren't inline, like we used to for C++98 non-constexpr static members. Amends 090991123dd82796fe956e4153bc26ace22280ca. This is required with MinGW and happens with both GCC and Clang: when a static constexpr variable found in an exported class is used in a context that requires getting its address, the compiler emit a DLL- importing statement. For example: void f(const std::chrono::milliseconds &ms); void f() { f(QNetworkRequest::DefaultTransferTimeout); } Emits with GCC: _Z1fv: movq __imp__ZN15QNetworkRequest22DefaultTransferTimeoutE(%rip), %rcx jmp _Z1fRKNSt6chrono8durationIxSt5ratioILx1ELx1000EEEE And Clang: _Z1fv: # @_Z1fv # %bb.0: movq __imp__ZN15QNetworkRequest22DefaultTransferTimeoutE(%rip), %rcx jmp _Z1fRKNSt6chrono8durationIxSt5ratioILx1ELx1000EEEE # TAILCALL Fixes: QTBUG-121135 Change-Id: I76ffba14ece04f24b43efffd17aae1a98071c570 Reviewed-by: Juha Vuolle Reviewed-by: André Klitzing Reviewed-by: Mårten Nordheim (cherry picked from commit c09219e946ed3d90349c3638afe304553bf38011) Reviewed-by: Qt Cherry-pick Bot --- src/network/access/qnetworkrequest.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/network/access/qnetworkrequest.cpp b/src/network/access/qnetworkrequest.cpp index 3dc8dc069fd..cbfd1739abd 100644 --- a/src/network/access/qnetworkrequest.cpp +++ b/src/network/access/qnetworkrequest.cpp @@ -30,6 +30,8 @@ QT_BEGIN_NAMESPACE using namespace Qt::StringLiterals; using namespace std::chrono_literals; +constexpr std::chrono::milliseconds QNetworkRequest::DefaultTransferTimeout; + QT_IMPL_METATYPE_EXTERN(QNetworkRequest) QT_IMPL_METATYPE_EXTERN_TAGGED(QNetworkRequest::RedirectPolicy, QNetworkRequest__RedirectPolicy)