[libc++] Implement the underlying mechanism for range adaptors
This patch implements the underlying mechanism for range adaptors. It
does so based on http://wg21.link/p2387, even though that paper hasn't
been adopted yet. In the future, if p2387 is adopted, it would suffice
to rename `__bind_back` to `std::bind_back` and `__range_adaptor_closure`
to `std::range_adaptor_closure` to implement that paper by the spec.
Differential Revision: https://reviews.llvm.org/D107098
NOKEYCHECK=True
GitOrigin-RevId: ee44dd8062a26541808fc0d3fd5c6703e19f6016
diff --git a/include/module.modulemap b/include/module.modulemap
index 98ba8d3..b6a39a0 100644
--- a/include/module.modulemap
+++ b/include/module.modulemap
@@ -647,7 +647,11 @@
module __ranges {
module access { private header "__ranges/access.h" }
- module all { private header "__ranges/all.h" }
+ module all {
+ private header "__ranges/all.h"
+ export functional.__functional.compose
+ export functional.__functional.perfect_forward
+ }
module common_view { private header "__ranges/common_view.h" }
module concepts { private header "__ranges/concepts.h" }
module copyable_box { private header "__ranges/copyable_box.h" }
@@ -662,13 +666,18 @@
module iota_view { private header "__ranges/iota_view.h" }
module join_view { private header "__ranges/join_view.h" }
module non_propagating_cache { private header "__ranges/non_propagating_cache.h" }
+ module range_adaptor { private header "__ranges/range_adaptor.h" }
module ref_view { private header "__ranges/ref_view.h" }
module reverse_view { private header "__ranges/reverse_view.h" }
module size { private header "__ranges/size.h" }
module single_view { private header "__ranges/single_view.h" }
module subrange { private header "__ranges/subrange.h" }
module take_view { private header "__ranges/take_view.h" }
- module transform_view { private header "__ranges/transform_view.h" }
+ module transform_view {
+ private header "__ranges/transform_view.h"
+ export functional.__functional.bind_back
+ export functional.__functional.perfect_forward
+ }
module view_interface { private header "__ranges/view_interface.h" }
}
}