我得到编译错误.但它不在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
问题的原因.
d正确利用编译错误
原创
©著作权归作者所有:来自51CTO博客作者fqbqrr的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
d编译错误
在使用rapidxml时,不能隐式从long转为uint,这时,就把long改成uint.
d 编译 错误 xml 干货 -
0530编译错误.
1,各种h与cpp后缀搞错.2,好标识/取消标识.3,资源.h,只添加需要的.4,微软的资源管理器右键
c++ 编译错误 赋值 预处理 后缀 -
内核编译错误
编译错误
Java -
GLSL编译错误
GLSL编译错误1.报错现象2.分析 从插件glsl language integration报错来看,是编译器无法识别gl_Vertex、和gl_Normal以及gl_Position这个三
着色器程序 片元着色器 顶点着色器 GLSL openGL -
编译错误总结
编译错误处理
职场 休闲 undefined reference -
KernelIoControl编译错误
BUILD: [01:0000000052:ERRORE] Restart.obj : error LNK2019: unresolv
WINCE #define #include 重启