【问题标题】:Failing to create a std::ranges::iota_view with value and bound无法创建具有值和绑定的 std::ranges::iota_view
【发布时间】:2020-12-01 11:00:44
【问题描述】:

我尝试创建一个带有值和边界的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());
}

link to program on godbolt

但是 clang 11.0.0 编译失败,报错:

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

我做错了什么?

【问题讨论】:

    标签: c++ range


    【解决方案1】:

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

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

    这将起作用:

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

    不幸的是,Clang 似乎还有另一个错误,但它 works in gcc;或者你可以use range-v3。

    【讨论】:

    • 非常感谢!我怎么能错过它^^ 使用 range-v3 库它可以工作:godbolt.org/z/7vv3f5
    • 哈哈 ^^ 你使用 range-v3 版本更快。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2020-12-31
    • 2019-01-01
    • 2020-09-22
    • 2021-10-01
    • 2020-01-11
    • 1970-01-01
    • 2014-05-24
    相关资源
    最近更新 更多