【发布时间】:2021-09-18 10:06:25
【问题描述】:
代码显示我的问题,take(3) 在istream_view 之后无法使用。
错误信息是:
/home/linuxbrew/.linuxbrew/Cellar/gcc/11.1.0_1/include/c++/11.1.0/ranges:1775:48: 错误:传递'std::ranges::take_view<:ranges: :transform_view char std::char_traits>, int ()(int)> >::_CI' {aka 'const std::counted_iterator<:ranges: :transform_view char std::char_traits>, int ()(int)>::_Iterator >'} as 'this' 参数丢弃限定符 [-fpermissive] 1775 | { 返回 __y.count() == 0 || __y.base() == __x._M_end; }
#include <ranges>
using namespace std::views;
using namespace std::ranges;
int to_sq(int a){return a*a;}
int main()
{
auto m_range = istream_view<int>(std::cin);
// error
for (auto i : m_range | transform(to_sq)|take(3))
{
std::cout << i << std::endl;
}
}
【问题讨论】:
-
看起来像是 fixed in trunk 的 gcc 错误。另外,如上所述,请包含
to_sq的定义。
标签: c++ c++20 std-ranges