Blob Blame History Raw
From 675a4b0cc77a81d92cea6e044200349676f3b117 Mon Sep 17 00:00:00 2001
From: Zhang Xiang <gbcatmifu@hotmail.com>
Date: Thu, 22 Apr 2021 15:35:29 +0800
Subject: Fix namespace error of std::source_location under C++20

With C++20 standard, src/corelib/kernel/qproperty.h of Qt Base cannot be
compiled at line 100:

QPropertyBindingSourceLocation(
	const std::experimental::source_location &cppLocation
	)

The reason is that source_location has been merged into namespace std
since C++20, and the header file has also been change from
<experimental/source_location> to <source_location>.

The problem can be avoided by define a constant.

Fixes: QTBUG-93270
Change-Id: I46b4daac6ea20f9623b43746880500d41396afb2
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
---
 src/corelib/kernel/qproperty.h | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

(limited to 'src/corelib/kernel/qproperty.h')

diff --git a/src/corelib/kernel/qproperty.h b/src/corelib/kernel/qproperty.h
index 108f041d4f..9f15a2de7d 100644
--- a/src/corelib/kernel/qproperty.h
+++ b/src/corelib/kernel/qproperty.h
@@ -50,11 +50,13 @@
 #include <QtCore/qpropertyprivate.h>
 
 #if __has_include(<source_location>) && __cplusplus >= 202002L && !defined(Q_CLANG_QDOC)
-#include <experimental/source_location>
+#include <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(<experimental/source_location>) && __cplusplus >= 201703L && !defined(Q_CLANG_QDOC)
 #include <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
@@ -102,7 +104,7 @@ struct Q_CORE_EXPORT QPropertyBindingSourceLocation
     quint32 column = 0;
     QPropertyBindingSourceLocation() = default;
 #ifdef QT_PROPERTY_COLLECT_BINDING_LOCATION
-    QPropertyBindingSourceLocation(const std::experimental::source_location &cppLocation)
+    QPropertyBindingSourceLocation(const QT_SOURCE_LOCATION_NAMESPACE::source_location &cppLocation)
     {
         fileName = cppLocation.file_name();
         functionName = cppLocation.function_name();
@@ -1199,6 +1201,8 @@ public:
     } \
     QObjectComputedProperty<Class, Type, Class::_qt_property_##name##_offset, __VA_ARGS__> name;
 
+#undef QT_SOURCE_LOCATION_NAMESPACE
+
 QT_END_NAMESPACE
 
 #endif // QPROPERTY_H
-- 
cgit v1.2.1