qcompilerdetection.h: Introduce Q_CONSTEXPR_DTOR macro for variables

Add this macro to declare constexpr variables that have destructors
marked with Q_DECL_CONSTEXPR_DTOR.

Declare variables using the new Q_CONSTEXPR_DTOR macro instead of
Q_DECL_CONSTEXPR_DTOR in syntax tests. Move the declarations inside the
functions as Q_DECL_CONSTEXPR_DTOR could only be used to declare
non-local variables.

[ChangeLog][QtCore] Introduced Q_CONSTEXPR_DTOR for variables, which
resolves to constexpr when __cpp_constexpr >= 201907L, otherwise it
resolves to const.

Task-number: QTBUG-124462
Change-Id: I06cd99bb956d9af560e92c326a7c82aa4c8852d1
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
Rym Bouabid 2024-07-11 12:53:38 +02:00
parent 94f87d6d65
commit 8fa8c574c0
3 changed files with 27 additions and 2 deletions

View File

@ -516,6 +516,7 @@
* https://en.cppreference.com/w/cpp/feature_test
* Exceptions:
* Q_DECL_CONSTEXPR_DTOR constexpr in C++20 for explicit destructors __cpp_constexpr >= 201907L
* Q_CONSTEXPR_DTOR constexpr in C++20 for variables __cpp_constexpr >= 201907L otherwise const
* Q_DECL_EQ_DELETE_X(message) = delete("reason"), __cpp_deleted_function >= 202403L
*
* C++ extensions:
@ -1014,6 +1015,14 @@
# endif
#endif
#ifndef Q_CONSTEXPR_DTOR
# if __cpp_constexpr >= 201907L
# define Q_CONSTEXPR_DTOR constexpr
# else
# define Q_CONSTEXPR_DTOR const
# endif
#endif
#ifndef Q_DECL_EQ_DELETE_X
# if defined(__cpp_deleted_function) && __cpp_deleted_function >= 202403L
# define Q_DECL_EQ_DELETE_X(reason) = delete(reason)

View File

@ -300,6 +300,23 @@
Use this macro to declare a destructor that can be computed at
compile-time in C++20 or later.
\sa Q_CONSTEXPR_DTOR
*/
/*!
\macro Q_CONSTEXPR_DTOR
\relates <QtCompilerDetection>
\since 6.9
Expands to \c{constexpr} on compilers that support C++20, where
\c{__cpp_constexpr} has a value greater than or equal to \c{201907L}.
Otherwise, it expands to \c{const}.
Use this macro to declare a variable that can be constructed at compile-time
in C++20 or later.
\sa Q_DECL_CONSTEXPR_DTOR
*/
/*!

View File

@ -1004,10 +1004,9 @@ private:
int *m_arr;
};
[[maybe_unused]] Q_DECL_CONSTEXPR_DTOR DestructorTest dt(nullptr);
void tst_QGlobal::CXX20_constexpr_dtor()
{
[[maybe_unused]] Q_CONSTEXPR_DTOR DestructorTest tmp0(nullptr);
#if __cpp_constexpr >= 201907L
[[maybe_unused]] constexpr DestructorTest tmp(nullptr);
#endif