From 665aaf9f6a7efb51ce63c54ed1dc382943e487f9 Mon Sep 17 00:00:00 2001 From: Ivan Solovev Date: Wed, 28 Aug 2024 14:59:23 +0200 Subject: [PATCH] QDate: rework stdSysDaysToJulianDay() Use !QT_CORE_REMOVED_SINCE(6, 7) to make the function a template in new C++20 code. The removed_api.cpp will still compile the exported version, keeping BC. This simplifies the ifdef'ery around the functions and saves the need for the QT6_{DECL,CALL}_NEW_OVERLOAD trick. Picking this change down to 6.7, because the original patch was also picked to 6.7. Tested it on MSVC in C++20 mode, and verified that the symbol is still there. Also tested the case from the linked bugreport, and verified that it does not give linker errors. Amends 88702cc87cf830b145c8bff5174748e3719364f9 and effectively reverts 91f48cc4b77b1cfb5a4490c3bed3eb97edd2f85a. Task-number: QTBUG-125610 Pick-to: 6.7 Change-Id: Idf49fd142cdc78ff8964a36f8c1e326357e1028e Reviewed-by: Thiago Macieira Reviewed-by: Marc Mutz (cherry picked from commit d23764c5a12e0d6d26dd54ee5613f7e5b1f9c8af) Reviewed-by: Edward Welbourne --- src/corelib/compat/removed_api.cpp | 2 +- src/corelib/time/qdatetime.h | 21 ++++++++------------- 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/src/corelib/compat/removed_api.cpp b/src/corelib/compat/removed_api.cpp index bbf406c5e35..33bb2baeb4b 100644 --- a/src/corelib/compat/removed_api.cpp +++ b/src/corelib/compat/removed_api.cpp @@ -700,7 +700,7 @@ QCborError QCborStreamReader::lastError() return std::as_const(*this).lastError(); } -#include "qdatetime.h" +#include "qdatetime.h" // also inlined API QDateTime::QDateTime(QDate date, QTime time, const QTimeZone &timeZone) : QDateTime(date, time, timeZone, TransitionResolution::LegacyBehavior) {} diff --git a/src/corelib/time/qdatetime.h b/src/corelib/time/qdatetime.h index 50cad473009..460dc15a697 100644 --- a/src/corelib/time/qdatetime.h +++ b/src/corelib/time/qdatetime.h @@ -35,28 +35,28 @@ public: #if __cpp_lib_chrono >= 201907L || defined(Q_QDOC) QT_POST_CXX17_API_IN_EXPORTED_CLASS Q_IMPLICIT constexpr QDate(std::chrono::year_month_day date) noexcept - : jd(date.ok() ? stdSysDaysToJulianDay(date QT6_CALL_NEW_OVERLOAD_TAIL) : nullJd()) + : jd(date.ok() ? stdSysDaysToJulianDay(date) : nullJd()) {} QT_POST_CXX17_API_IN_EXPORTED_CLASS Q_IMPLICIT constexpr QDate(std::chrono::year_month_day_last date) noexcept - : jd(date.ok() ? stdSysDaysToJulianDay(date QT6_CALL_NEW_OVERLOAD_TAIL) : nullJd()) + : jd(date.ok() ? stdSysDaysToJulianDay(date) : nullJd()) {} QT_POST_CXX17_API_IN_EXPORTED_CLASS Q_IMPLICIT constexpr QDate(std::chrono::year_month_weekday date) noexcept - : jd(date.ok() ? stdSysDaysToJulianDay(date QT6_CALL_NEW_OVERLOAD_TAIL) : nullJd()) + : jd(date.ok() ? stdSysDaysToJulianDay(date) : nullJd()) {} QT_POST_CXX17_API_IN_EXPORTED_CLASS Q_IMPLICIT constexpr QDate(std::chrono::year_month_weekday_last date) noexcept - : jd(date.ok() ? stdSysDaysToJulianDay(date QT6_CALL_NEW_OVERLOAD_TAIL) : nullJd()) + : jd(date.ok() ? stdSysDaysToJulianDay(date) : nullJd()) {} QT_POST_CXX17_API_IN_EXPORTED_CLASS static constexpr QDate fromStdSysDays(const std::chrono::sys_days &days) noexcept { - return QDate(stdSysDaysToJulianDay(days QT6_CALL_NEW_OVERLOAD_TAIL)); + return QDate(stdSysDaysToJulianDay(days)); } QT_POST_CXX17_API_IN_EXPORTED_CLASS @@ -177,9 +177,11 @@ private: static constexpr inline qint64 unixEpochJd() { return Q_INT64_C(2440588); } #if __cpp_lib_chrono >= 201907L +#if !QT_CORE_REMOVED_SINCE(6, 7) QT_POST_CXX17_API_IN_EXPORTED_CLASS +#endif static constexpr qint64 - stdSysDaysToJulianDay(const std::chrono::sys_days &days QT6_DECL_NEW_OVERLOAD_TAIL) noexcept + stdSysDaysToJulianDay(const std::chrono::sys_days &days) noexcept { const auto epochDays = days.time_since_epoch().count(); // minJd() and maxJd() fit into 40 bits. @@ -191,13 +193,6 @@ private: } return unixEpochJd() + epochDays; } - -#if QT_VERSION_MAJOR < 7 && !defined(QT_BOOTSTRAPPED) - static constexpr qint64 stdSysDaysToJulianDay(const std::chrono::sys_days &days) noexcept - { - return stdSysDaysToJulianDay(days QT6_CALL_NEW_OVERLOAD_TAIL); - } -#endif // Qt < 7 and not bootstrapped #endif // __cpp_lib_chrono >= 201907L qint64 jd;