From 1924f78df68d69fa7c69c394c547307e25dfffe1 Mon Sep 17 00:00:00 2001 From: Fabian Kosmale Date: Sun, 6 Jun 2021 12:14:17 +0200 Subject: [PATCH] QProperty: Fix source_location feature testing The presence of the source_location header does not guarantee the availablility of std::source_location. For instance, if using clang 11 with a modern libstdc++, the source_location header is available, but std::source_location is not available as it would require __builtin_source_location, which clang does not implement. Consequently, we need to explicitly check the feature test macro instead, and only use std::(experimental::)source_location when it is defined. Task-number: QTBUG-94194 Pick-to: 6.1 Change-Id: If6fda9a1b98244b1f2944fff6fe1991def30fc0f Reviewed-by: Lars Knoll --- src/corelib/kernel/qproperty.h | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/corelib/kernel/qproperty.h b/src/corelib/kernel/qproperty.h index 9c002f378ff..b25e9325954 100644 --- a/src/corelib/kernel/qproperty.h +++ b/src/corelib/kernel/qproperty.h @@ -49,15 +49,23 @@ #if __has_include() && __cplusplus >= 202002L && !defined(Q_CLANG_QDOC) #include +#if defined(__cpp_lib_source_location) #define QT_SOURCE_LOCATION_NAMESPACE std #define QT_PROPERTY_COLLECT_BINDING_LOCATION #define QT_PROPERTY_DEFAULT_BINDING_LOCATION QPropertyBindingSourceLocation(std::source_location::current()) -#elif __has_include() && __cplusplus >= 201703L && !defined(Q_CLANG_QDOC) +#endif +#endif + +#if !defined(QT_PROPERTY_COLLECT_BINDING_LOCATION) && __has_include() && __cplusplus >= 201703L && !defined(Q_CLANG_QDOC) #include +#if defined(__cpp_lib_experimental_source_location) #define QT_SOURCE_LOCATION_NAMESPACE std::experimental #define QT_PROPERTY_COLLECT_BINDING_LOCATION #define QT_PROPERTY_DEFAULT_BINDING_LOCATION QPropertyBindingSourceLocation(std::experimental::source_location::current()) -#else +#endif +#endif + +#if !defined(QT_PROPERTY_COLLECT_BINDING_LOCATION) #define QT_PROPERTY_DEFAULT_BINDING_LOCATION QPropertyBindingSourceLocation() #endif