d正确利用编译错误
我得到编译错误.但它不在foo
中,它在bar
中.它说:
错误:onlineapp.bar!(foo)
模板实例与x=foo(T)(T v)
的bar(alias x)()
模板声明不匹配,必须满足__traits(compiles,x(1))
约束.
我一般是提取约束模板
并实际用该类型
调用约束
中的函数,然后查看失败
原因.这有点烦人,有时很难根据实现约束
的代码点及实际调用点
来找.
此问题乏味但可靠
的方法是用-verrors=spec
重新编译,在输出中搜索原始错误
消息,然后向上滚动,直到推测
错误中找到要查找的内容
.唯一问题是,必须翻阅大量无用信息才能找到真正关心
的信息.
我认为
,更容易的最佳
方法是让编译器
在模板无法实例化
时为每个失败的约束提供推测
错误的"堆栈跟踪",可能在开关后面(-verrors=constraints)
来避免阻塞
在常见情况
下提高输出.
好处是可处理*所有*
这样的间接错误,而不仅仅是涉及IFTI
的错误.如,-verrors=constraints
可以帮助我解决最近必须在SumType
的复制构造器
中调试的问题,而__traits(canCall)
完全没用.
SumType
的复制构造器由于编译器错误
而失败,但我得到的错误是,
src/sumtype.d(1412,4):
错误:静态断言:“模板
类型的handlers[0]
从不匹配”
因为复制构造器
内部使用match
,处理器无法推测性编译时,match
给的错误.打开-verrors=spec
可让我看到导致推断编译失败
的处理器内部
的错误:
(spec:1)src/sumtype.d-mixin-407(407):
错误:Storage联
有构造器,不能使用{初化器
},改用Storage(initializers)
这就是导致我诊断
并最终解决20842
问题的原因.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现