Files
ViewDesignEngine/docs/feedback/VDE-016.md
T
hm faa20db3c9
Build & Test / build-and-test (push) Waiting to run
Build & Test / python-bindings (push) Blocked by required conditions
CI / Build & Test (push) Failing after 41s
CI / Release Build (push) Failing after 33s
docs: update VDE-016 — using declarations are no-ops inside same namespace; only fully-qualified names work
2026-07-28 07:56:02 +08:00

1.9 KiB

id, status, severity, category, date, updated, reporter, related
id status severity category date updated reporter related
VDE-016 open critical bug 2026-07-27 2026-07-27 ViewDesign VDE-001, VDE-005, VDE-010

VDE-016: ssi_boolean.cpp GCC 名称查找失败(using 声明无效)

问题描述

vde::brep 作用域内使用 using vde::brep::SSICurveData;using vde::brep::ClassResult; 是空操作,GCC 忽略。匿名 namespace 关闭后的公共函数仍找不到这些类型。

已尝试的方案及其结果:

方案 代码 结果
v1.0.4 using 放在 namespace{ 内部 仅匿名 ns 内有效,关闭后失效
v1.0.5 using ClassResult; / using SSICurveData; 语法错误:expected nested-name-specifier
修正语法 using vde::brep::ClassResult; / using vde::brep::SSICurveData; 空操作,GCC 忽略
全限定名 vde::brep::SSICurveData / vde::brep::ClassResult 类型找到,但级联问题(enum值/mesh)

编译错误 (v1.0.5, 无 workaround)

error: 'SSICurveData' was not declared at lines 510, 613
error: 'begin'/'end' was not declared (级联)
error: 'ClassResult' was not declared at line 644

唯一可用的修复方案:全限定名

已验证可行:将所有非限定名替换为全限定名:

SSICurveData  →  vde::brep::SSICurveData
ClassResult   →  vde::brep::ClassResult
OUT / IN      →  vde::brep::OUT / vde::brep::IN   (enum values)
mesh          →  vde::mesh                         (namespace)

代码量较大(~20+ 处),但有效。

根因

GCC 两阶段查找对此文件的 namespace 嵌套结构处理与 MSVC 不同。即使在同一个 vde::brep namespace 中,#include 引入的类型 + 局部前向声明 + 多个匿名 namespace 的组合导致 GCC 在第二遍查找(非限定名)时找不到同命名空间的符号。

当前 Workaround

ViewDesign 排除 vde_brep 及其依赖。