我尝试创建一个带有值和边界的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)
但 clang 11.0.0 无法编译并显示错误消息:
没有可行的构造函数或推导指南来推导“iota_view”的模板参数
我究竟做错了什么?
来自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。