d不能链接问题
原文
化简为:
struct S()
{
void delegate() d;
}
S!() f_Ds(U)()
{
static if (is(U == struct))
return S!()
(
{
foreach (i, field; U.init.tupleof)
f_Ds!(typeof(field))();
}
);
else
return f_Ds!(D)();
}
void f_E()
{
auto f = S!()
(
{
enum x = is(typeof(f_Ds!(D*)()));
f_Ds!(D*)();
}
);
}
struct A
{
D* d;
}
struct D
{
A a;
int b;
}
void main()
{
f_E();
f_Ds!(D*)();
}
再化简为:
void f()() { h!()(); }
void g()() { f!()(); }
void h()() { g!()(); }
enum x = is(typeof(g!()()));
alias my_h = h!();
void main() {}
这里有个变体,无论用不用-debug
都失败:
void f()()
{
g!()();
h!()();
}
void g()() { f!()(); }
void h()() { f!()(); }
enum x = is(typeof(f!()()));
alias my_g = g!();
void main() {}
原始测试修复
其他化简仍失败,在这里之后带-debug
会失败.
下面是猜测,看看语义分析:
1
.首先分析x
语义.typeof
实例化了f!()
.
2
.f!()
实例化了g!()
和h!()
.
3
.my_g
直接实例化了g!()
.
h!()
只是间接
实例化的,并且因为是在typeof
实例化,因此不会按为它生成代码
标记.
DMD
默认是急切修剪
期望在其他地方实例化
的模板
.按默认
期望未定义的引用
.
如果在-allist
中有未定义的错误
,则是要修复的漏洞
.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现