Files
codeql/swift/third_party/swift-llvm-support/patches/remove-result-of.patch
Paolo Tranquilli 3ff7148147 Swift: remove std::result_of from swift headers
`std::result_of` was removed in C++20, though the actual removal from
the STL library implementations seems to depend on the version. For
example using xcode 14.2 one gets away with a deprecation warning, but
xcode 14.3 will fail.

As Swift 5.8.1 is still compiled with C++14, we cannot replace
`std::result_of` with `std::invoke_result` in the prebuilding patches
just yet, but we can do that for the extractor itself, patching the
prebuilt package.
2023-06-19 15:29:45 +02:00

31 lines
1.4 KiB
Diff

`std::result_of` was removed in C++20, but is still used in the Swift headers. We can't
remove it from there before prebuilding, as that is still done with C++14, but we can
replace it with `std::invoke_result` for compiling the extractor.
diff --git a/include/swift/Basic/RelativePointer.h b/include/swift/Basic/RelativePointer.h
index 73f91262afa..bdaa304c804 100644
--- a/include/swift/Basic/RelativePointer.h
+++ b/include/swift/Basic/RelativePointer.h
@@ -551,7 +551,7 @@ public:
}
template <typename... ArgTy>
- typename std::result_of<T *(ArgTy...)>::type operator()(ArgTy... arg) const {
+ typename std::invoke_result<T*, ArgTy...>::type operator()(ArgTy... arg) const {
#if SWIFT_PTRAUTH
void *ptr = this->super::getWithoutCast();
return reinterpret_cast<T *>(ptrauth_sign_unauthenticated(
diff --git a/include/swift/Basic/STLExtras.h b/include/swift/Basic/STLExtras.h
index 7fa3d0c8890..6bc891a9b63 100644
--- a/include/swift/Basic/STLExtras.h
+++ b/include/swift/Basic/STLExtras.h
@@ -405,7 +405,7 @@ class OptionalTransformIterator {
typename std::iterator_traits<Iterator>::reference;
using ResultReference =
- typename std::result_of<OptionalTransform(UnderlyingReference)>::type;
+ typename std::invoke_result<OptionalTransform, UnderlyingReference>::type;
public:
/// Used to indicate when the current iterator has already been