范围 TS 重大变化?

Ranges TS breaking changes?

据说将 Ranges TS 注入 std 命名空间会导致对标准库(例如 this link)的一些破坏性更改。有人知道这些变化是什么吗?

来自N4569 Annex B(由@Holt 在上面的评论中编辑link):

  • 算法 Return 类型 -- 修改为包括结束迭代器

  • 更强的约束——过去只需要 < 的算法现在需要所有比较运算符

  • Constrained Functional Objects -- 添加到std::less类型等的约束。

  • 迭代器和默认可构造性 -- Ranges_v3 假设迭代器可以默认构造(以一种有用的方式)。目前不需要。

  • iterator_traits 无法特化 -- 在 Range_v3 中,它是一个别名模板。

  • N3351 -- 它在很多方面也与 N3351 提案不兼容,我不会在这里讨论。

这只是一个总结。按照 link 到论文或查找它以获取更多详细信息。