我正在使用STL C ++ 0x容器调试一些C ++解析器(工具链是GCC 4.7.0)。
由于STL重新绑定代码难以理解,我需要以某种方式打印像std::vector<T>::reference
这样的typedef的完整实例化链。当然,它仅解析为T&
,但在__gnu_cxx
和其他内部传递至少7个不同的模板之前。
所以我期待像模板错误那样打印的东西,但是编译器实例化的每个类。 可能吗? GCC插件,也许......
UPD:嗯,我手动实例化了所有必需的模板。似乎没有好办法自动执行此操作,除了将一些调试printf语句插入GCC代码本身。
答案 0 :(得分:0)
由于您使用的是GCC 4.7,我假设您所在的系统可以对您的代码进行操作。 Clang的错误消息,特别是模板非常好。
template class Example { Example(const T& t) : t_(t) {} T& t_; }; int a; Example e(a);
输出:
t.cpp:8:14: error: calling a private constructor of class 'Example' Example e(a); ^ t.cpp:3:5: note: implicitly declared private here Example(const T& t) : t_(t) {} ^ t.cpp:3:27: error: binding of reference to type 'int' to a value of type 'const int' drops qualifiers Example(const T& t) : t_(t) {} ^ ~ t.cpp:8:14: note: in instantiation of member function 'Example::Example' requested here Example e(a); ^ 2 errors generated.