Skip to content

feat: standard = "c++fly" — one knob for latest std + all experimental features (0.0.91)#214

Merged
Sunrisepeak merged 5 commits into
mainfrom
feat/cppfly-091
Jul 14, 2026
Merged

feat: standard = "c++fly" — one knob for latest std + all experimental features (0.0.91)#214
Sunrisepeak merged 5 commits into
mainfrom
feat/cppfly-091

Conversation

@Sunrisepeak

Copy link
Copy Markdown
Member

What

standard = "c++fly":一行 manifest 启用「resolved 工具链最新 -std= 档位 + 它能开的全部实验特性门(语言 + 标准库)」。

[package]
standard = "c++fly"   # gcc16 → -std=c++26 -freflection(+contracts);clang → -std=c++2c -fexperimental-library
  • 新模块 src/toolchain/cppfly.cppm:三张数据表(族×版本→最新档 / 语言特性门 / stdlib 门)+ cppfly::resolve,首个真正使用 Toolchain::version 做门控的查询点。
  • 产物汇入 0.0.90(import std; 无法暴露 std::meta(P2996 反射):build.cxxflags 中的 -freflection 未应用到 std 模块 BMI 预构建 #210)图全局方言旗标通道:全图 TU、P1689 扫描、std BMI 预构建经同一合并函数(effective_dialect_flags)同源;派生旗标并入指纹。
  • 软语义 + summary:不支持的特性跳过并打印 c++fly on <tc>: <std>; enabled: ...; skipped: ...(mcpp 诊断替代编译器原始报错)。
  • 顺手修复:standard = "c++latest" 在 GNU 族误拼 -std=c++latest(GCC/Clang 不识别)→ 现解析到族最新档。

设计(含编译器支持矩阵、方案取舍、实机探测记录):.agents/docs/2026-07-14-std-features-experimental-gate-design.md
实施计划:.agents/docs/2026-07-14-single-pr-091-implementation-plan.md

实机定案(gcc 16.1.0 探测)

  • 契约 P2900 随 -std=c++26 默认启用(__cpp_contracts 已定义),-fcontracts 仅用于更早标准强开 → 表数据空串;
  • 反射 P2996 必须 -freflection(不对称)。

Tests

  • 单测:test_cppfly.cpp(8 用例:表判定/版本门控/std 拼写/去重)+ test_manifest.cpp normalize c++fly;本地 33/33 组全绿。
  • e2e 100(gcc16 硬路径):零手写旗标跑通 std::meta 反射,断言 summary/build.ninja/compile_commands/std-module.json 全链路 + c++latest 拼写回归 — PASS。
  • e2e 101(clang 软路径):-std=c++2c + skipped summary + libc++ -fexperimental-library — PASS。
  • 本地全量 e2e:101 过/3 败(22/54/62,均为 2026-07-07 基线已记录的环境性失败,exit 127=命令缺失)/5 跳,零回归。

Version

0.0.91(mcpp.toml + MCPP_VERSION 两处同步)。

@Sunrisepeak Sunrisepeak merged commit 7c5ec68 into main Jul 14, 2026
6 checks passed
@Sunrisepeak Sunrisepeak deleted the feat/cppfly-091 branch July 14, 2026 17:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant