无法创建带有值和绑定的 std::ranges::iota_view

The*_*moo 5 c++ range

我尝试创建一个带有值和边界的std::ranges::iota_view :

#include <ranges>
#include <vector>

int main() {
  std::vector v{1,2,3};
  auto indices = std::ranges::views::iota(0, v.size());
}
Run Code Online (Sandbox Code Playgroud)

链接到 godbolt 上的程序

但 clang 11.0.0 无法编译并显示错误消息:

没有可行的构造函数或推导指南来推导“iota_view”的模板参数

我究竟做错了什么?

eca*_*mur 6

来自https://en.cppreference.com/w/cpp/ranges/iota_view

请注意,[推导] 指南会保护自身免受有符号/无符号不匹配错误的影响,例如views::iota(0, v.size()),其中0是(有符号)int 且v.size()是(无符号)std::size_t。

这将起作用:

auto indices = std::ranges::views::iota(0u, v.size());
                                         ^ unsigned zero literal
Run Code Online (Sandbox Code Playgroud)

不幸的是 Clang 似乎还有另一个 bug,但它可以在 gcc 中工作;或者您可以使用 range-v3