跳转至

ev-mold-variant-reference-filter-003

字段 值
项目 rui314/mold
固定 commit 27162691b71a
路径 src/cmdline.cc
行段 L1512-L1516
特性 std::variant
许可证 MIT
代码来源 项目源码
级别 manual
审核 zyuhao7 @ 2026-10-25
测试代码 否
发现方式 tree-sitter

用法

持有 variant 的引用,并用 get_if 过滤出符号类型的元素

为什么典型

循环只需处理其中一个活动成员;get_if 不抛异常,非空结果直接解引用,空的数值地址成员被跳过。

摘录

  for (i64 i = 0; i < ctx.arg.defsyms.size(); i++) {
    std::variant<Symbol<E> *, u64> &val = ctx.arg.defsyms[i].second;
    if (Symbol<E> **sym = std::get_if<Symbol<E> *>(&val))
      ctx.arg.undefined.push_back(*sym);
  }

备注

生产路径;get_if 对引用取地址,参数是 variant 指针而不是值。

查看固定 commit 源码 · 返回证据索引