打印实例化链

时间:2012-05-01 10:57:53

标签: c++ debugging instantiation typename

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

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

所以我期待像模板错误那样打印的东西,但是编译器实例化的每个类。 可能吗? GCC插件,也许......

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

1 个答案:

答案 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.