4

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

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

所以我期待在模板错误的情况下打印什么,但是对于编译器实例化的每个类。可能吗?GCC 插件,也许...

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

4

1 回答 1

0

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

    模板
    类示例{
        示例(常量 T& t):t_(t) {}
        T&T_;
    };

    诠释一个;
    示例 e(a);

输出:

    t.cpp:8:14:错误:调用类“示例”的私有构造函数
    示例 e(a);
                 ^
    t.cpp:3:5: 注意:这里隐式声明为私有
        示例(常量 T& t):t_(t) {}
        ^
    t.cpp:3:27:错误:对类型“int”的引用绑定到类型“const int”的值会下降
          限定词
        示例(常量 T& t):t_(t) {}
                              ^ ~
    t.cpp:8:14:注意:在此处请求的成员函数“Example::Example”的实例化中
    示例 e(a);
                 ^
    产生 2 个错误。

于 2012-05-20T22:22:03.637 回答