Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

Incorrect behavior of reversed_range with -O2 g++ option

未关闭
#82 5 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
4/5
预计耗时
3-5 天
新手友好度
42/100
Issue 类型
缺陷
描述清晰度
基本清楚
活跃度
停滞
技术栈
cpp
领域
tooling

调研方向

首先使用 g++ 或 clang++,分别以 -O0 和 -O2 编译 issue 中的示例代码,然后检查 boost::adaptors::reverse 使用的 reversed_range 入口点。确认优化后的构建产生预期的 2 1 0 输出,并添加一个涵盖报告中的编译器和优化级别的回归测试。

由索引模型根据 Issue 内容生成。

描述

Example code:

#include "boost/iterator/counting_iterator.hpp"
#include "boost/range/iterator_range.hpp"
#include "boost/range/adaptor/reversed.hpp"

#include <iostream>

int main(int, char **)
{
    using iterator = boost::counting_iterator<int>;
    using iterator_range = boost::iterator_range<iterator>;
    using reversed_range = boost::reversed_range<iterator_range>;

    iterator first(0), last(3);
    iterator_range range(first, last);
    reversed_range r_range = boost::adaptors::reverse(range);

    reversed_range::const_iterator it = r_range.begin();
    for (; it != r_range.end(); ++it)
        std::cout << *it << " ";
    std::cout << std::endl;
}

Compile with: -O2

Output: 3 integer numbers, different from run to run, similar to

22007 22007 22007

(with g++)
or

-1807142200 0 0

(with clang++)

When compiled with -O0 produces the correct output:

2 1 0

Reproducible with:
Boost 1.67.0, 1.68.0
g++ 6.4.0, 7.3.0, 8.2.0; clang++ 7.0.0-3
CPU architecture: x86-64 (Intel Xeon)

主要语言
C++
星标
45
派生
104
PR 合并指标
30 天内没有已合并 PR

环境准备

这个项目没有提供开发容器、Dockerfile 或贡献指南,环境需要你自己搭建:先看它的 README,通用步骤见我们的新手贡献指南。

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

boostorg/range 的其他 Issue

查看 boostorg/range 的全部 Issue

相似的 Issue

更多 C++ Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。