我与MSVC8 Terse错误消息:有什么办法可以更明确吗?
Baz<Foo, Bar> blah_blah(Foo const& f, Bar const& b)
{ return Baz<Foo, Bar>(f, b); }
,我得到这个错误:
error C2893: Failed to specialize function template 'Baz<Foo, Bar> blah_blah(Foo, Bar)'
with the following template arguments:
'ConcreteFoo'
'ConcreteBar'
这绝对是无用的,可能会需要我很多的时间来调查问题(涉及相当多毛的模板和ConcreteFoo
和ConcreteBar
本身就是多毛的模板)。
我想知道哪些类型/成员对象/成员函数从ConcreteFoo
和ConcreteBar
中丢失,它们阻止了Baz
模板的实例化。
有没有办法解决这个来自Visual C++ 2005的白痴错误报告?
编辑(相关):巴兹,ConcreteFoo和ConcreteBar是这样的:
template <typename T, typename U, bool = f(T, U), int = g(T, U), etc>
struct Baz
{ ... }
而且有相当多的部分特例。我知道哪一个来自编译器消息。另外,函数f和g是丑陋的元编程的东西,我相信我的问题来自那里:有一个f或g不能产生正确的结果。 ConcreteFoo或ConcreteBar中必须有一些类型/静态成员缺失,我不知道哪一个。另外,我很难抓住项目的相关部分,编写一个测试项目,我想要更多的“内联”项目。
为什么不发布完整的错误信息,因为它是? – 2010-12-16 11:41:07
这肯定会违反我的NDA。错误信息只是我发布的错误信息,尽管名称不同。 – 2010-12-16 11:41:40
当编译器没有帮助时,我尝试隔离问题。例如,我会尝试:使函数返回void并重新编译(以清空实现函数);尝试使用其他参数类型,比如int等...... – gnobal 2010-12-16 12:02:43