【发布时间】:2021-07-21 15:01:23
【问题描述】:
我在看下面的sn-p:
std::vector<int> elements{ 1,2,3 };
// this won't compile:
elements
| std::views::filter([](auto i) { return i % 2 == 0; })
| std::ranges::for_each([](auto e) {std::cout << e << std::endl; });
// but this compiles:
auto view =
elements
| std::views::filter([](auto i) { return i % 2 == 0; });
std::ranges::for_each(view, [](auto e) {std::cout << e << std::endl; });
而且我看不出范围适配器(视图)和通过管道运算符的范围算法的组合无法编译的原因。我想这与for_each 似乎在我的编译器(msvc 19.29)报告时返回的std::ranges::dangling 类型有关,但我不确定......
【问题讨论】:
-
因为
for_each不适用于范围适配器对象。你可以在它周围做一个包装器。
标签: c++ c++20 std-ranges