Распечатать цепочку создания экземпляров

Я отлаживаю синтаксический анализатор C++ с контейнерами STL C++0x (набор инструментов - GCC 4.7.0).

И поскольку код перепривязки STL трудно понять, мне нужно как-то напечатать полную цепочку инстанциаций для typedef, например std::vector<T>::reference, Конечно, это решает только T&, но до того, как он пройдет как минимум 7 различных шаблонов в __gnu_cxx и другие внутренние органы.

Поэтому я ожидаю что-то вроде того, что печатается в случае ошибок шаблона, но для каждого класса, создаваемого компилятором. Является ли это возможным? Плагины GCC, может быть...

UPD: Ну, я создал все необходимые шаблоны вручную. Кажется, нет хорошего способа сделать это автоматически, кроме вставки некоторых отладочных операторов printf в сам код GCC.

1 ответ

Поскольку вы используете GCC 4.7, я предполагаю, что вы находитесь в системе, где вы можете запустить clang для своего кода. Сообщения об ошибках Clang, особенно с шаблонами, довольно хороши.

    шаблон
    Пример класса {
        Пример (const T& t): t_(t) {}
        T& T_;
    };

    int a;
    Пример е (а);

выходы:

    t.cpp: 8: 14: ошибка: вызов частного конструктора класса "Пример"
    Пример е (а);
                 ^
    t.cpp:3:5: note: неявно объявлено здесь приватным
        Пример (const T& t): t_(t) {}
        ^
    t.cpp:3:27: ошибка: привязка ссылки на тип 'int' к значению типа 'const int' сбрасывается
          классификаторы
        Пример (const T& t): t_(t) {}
                              ^  ~
    t.cpp:8:14: note: при создании экземпляра функции-члена 'Example:: Example', запрашиваемой здесь
    Пример е (а);
                 ^
    Сгенерировано 2 ошибки.
Другие вопросы по тегам