mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Avoid using std::views::filter to fix issues with macosx-x86_64 toolchain (#42076)
Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/42076 ## Changelog: [Internal] - In https://github.com/facebook/react-native/pull/41519 we introduced usage of C++20s range operations, which broke MacOSX desktop builds for the x86_64 targets (e.g. on Intel Mac laptops). This appears to be a [known issue](https://stackoverflow.com/questions/73929080/error-with-clang-15-and-c20-stdviewsfilter), fixed in the later clang versions, however we need to support the earlier ones as well. This changes the code to use the good old imperative style to do the same thing, but without using `std::views::filter`, thus working around the problem. Reviewed By: christophpurrer Differential Revision: D52428984 fbshipit-source-id: 6d0a390549c462b7040b5c0e669c00932bd99af7
This commit is contained in:
committed by
Facebook GitHub Bot
parent
c2c346ccaf
commit
ffe219cd06
+15
-18
@@ -90,25 +90,22 @@ std::tuple<EventPath, EventPath> PointerHoverTracker::diffEventPath(
|
||||
++otherIt;
|
||||
}
|
||||
|
||||
auto removedViews =
|
||||
std::ranges::subrange{myIt, myEventPath.rend()} |
|
||||
std::views::transform(
|
||||
[this, &uiManager](const ShadowNode& node) -> const ShadowNode* {
|
||||
return this->getLatestNode(node, uiManager);
|
||||
}) |
|
||||
std::views::filter([](auto n) -> bool { return n != nullptr; }) |
|
||||
std::views::transform([](auto n) -> ShadowNode const& { return *n; });
|
||||
EventPath removed(removedViews.begin(), removedViews.end());
|
||||
EventPath removed;
|
||||
for (const auto& node : std::ranges::subrange{myIt, myEventPath.rend()}) {
|
||||
const auto& latestNode = getLatestNode(node, uiManager);
|
||||
if (latestNode != nullptr) {
|
||||
removed.push_back(*latestNode);
|
||||
}
|
||||
}
|
||||
|
||||
auto addedViews =
|
||||
std::ranges::subrange{otherIt, otherEventPath.rend()} |
|
||||
std::views::transform(
|
||||
[&other, &uiManager](const ShadowNode& node) -> const ShadowNode* {
|
||||
return other.getLatestNode(node, uiManager);
|
||||
}) |
|
||||
std::views::filter([](auto n) -> bool { return n != nullptr; }) |
|
||||
std::views::transform([](auto n) -> ShadowNode const& { return *n; });
|
||||
EventPath added(addedViews.begin(), addedViews.end());
|
||||
EventPath added;
|
||||
for (const auto& node :
|
||||
std::ranges::subrange{otherIt, otherEventPath.rend()}) {
|
||||
const auto& latestNode = other.getLatestNode(node, uiManager);
|
||||
if (latestNode != nullptr) {
|
||||
added.push_back(*latestNode);
|
||||
}
|
||||
}
|
||||
|
||||
return std::make_tuple(removed, added);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user