Use consteval in QT_PROPERTY_DEFAULT_BINDING_LOCATION

Adds a consteval QPropertyBindingSourceLocation::fromStdSourceLocation
to make sure the QPropertyBindingSourceLocation is created at compile
time.
This is a workaround for what seem to be bugs in MSVC 2019 and 2022,
which otherwise don't regard
QPropertyBindingSourceLocation(std::source_location::current()) as a
constant expression.

Fixes: QTBUG-106277
Pick-to: 6.4 6.2
Change-Id: Ic2379987b278cc0c43c1eb929120c99f5cd95fdf
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
This commit is contained in:
Patrick Stewart 2022-09-06 11:27:15 +01:00
parent 2625e5f050
commit 7979665362

View File

@ -18,7 +18,7 @@
#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())
#define QT_PROPERTY_DEFAULT_BINDING_LOCATION QPropertyBindingSourceLocation::fromStdSourceLocation(std::source_location::current())
#endif
#endif
@ -86,6 +86,12 @@ struct Q_CORE_EXPORT QPropertyBindingSourceLocation
line = cppLocation.line();
column = cppLocation.column();
}
QT_POST_CXX17_API_IN_EXPORTED_CLASS
static consteval QPropertyBindingSourceLocation
fromStdSourceLocation(const std::source_location &cppLocation)
{
return cppLocation;
}
#endif
#ifdef __cpp_lib_experimental_source_location
constexpr QPropertyBindingSourceLocation(const std::experimental::source_location &cppLocation)