weakly_incrementable 使用 iota_view 时的约束

weakly_incrementable constraint while using iota_view

要快速创建一个类似于 python 的 for i in range(100) 的 for 循环,我可以这样做:

for (auto const i : std::views::iota(0, 100))
{ /* ... */ }

但是,CLion 警告我向我的 auto 添加一个 std::weakly_incrementable 约束:

for (std::weakly_incrementable auto const i : std::views::iota(0, 100))
{ /* ... */ }

我知道 iota_view 的起始值必须是 weakly_incrementable,并且我假设 auto i 将创建一个与起始值。

但这是真的吗?它是否有可能创建完全不同类型的东西(甚至不能弱增量)?我可以安全地忽略警告吗?

Is it possible for it to create something of a totally different type (not even weakly incrementable)? And can I safely ignore the warning?

根据[range.iota.view]iota_view的提要:

template<weakly_­incrementable W, semiregular Bound = unreachable_sentinel_t>
class iota_view : public view_interface<iota_view<W, Bound>> {
  //...
};

已经约束W必须是weakly_incrementable。由于 iota_view​::​iterator::operator*() returns 与 W 类型相同,您可以忽略此警告。