打印实例化链

Print instantiation chain

本文关键字:实例化 打印      更新时间:2023-10-16

我正在使用STL调试一些C++解析器C++0x容器(工具链是GCC 4.7.0)。

而且由于 STL 重新绑定代码很难理解,我需要以某种方式为像 std::vector<T>::reference 这样的 typedef 打印完整的实例链。当然,它只是解析为 T& ,但在它通过 __gnu_cxx 和其他内部结构中的至少 7 个不同模板之前。

所以我期待在出现模板错误的情况下打印的东西,但对于编译器实例化的每个类。可能吗?海湾合作委员会插件,也许...

UPD:嗯,我已经手动实例化了所有必需的模板。似乎没有自动执行此操作的好方法,除了在 GCC 代码本身插入一些调试 printf 语句。

由于您使用的是GCC 4.7,因此我假设您使用的是可以对代码运行clang的系统。 Clang的错误消息,特别是模板,非常好。

   模板    类示例 {        example(const T& t) : t_(t) {}        T&t_;    };    国际 a;    示例 e(a);

输出:

   T.cpp:8:14:错误:调用类"示例"的私有构造函数    示例 e(a);                 ^    T.cpp:3:5:注意:此处隐式声明为私有        example(const T& t) : t_(t) {}        ^    T.cpp:3:27:错误:将引用类型"int"绑定到类型"const int"的值          限定 符        example(const T& t) : t_(t) {}                              ^  ~    T.cpp:8:14:注意:此处请求成员函数"示例::示例"的实例化    示例 e(a);                 ^    生成 2 个错误。