2012-05-01 7 views
4

私は、STL C++ 0xコンテナ(ツールチェーンはGCC 4.7.0)でデバッグしています。インスタント化チェーンの印刷

STLのリバインドコードはほとんど理解できないため、std::vector<T>::referenceのようなtypedefのインスタンス化の完全なチェーンを何とか出力する必要があります。もちろん、T&に解決されますが、__gnu_cxxと他の内部構造で少なくとも7つの異なるテンプレートを通過する前に解決されます。

私はテンプレートエラーの場合に何が印刷されているかを期待していますが、の場合、すべてクラスはコンパイラによってインスタンス化されています。 可能ですか? GCCプラグイン、おそらく...

UPD:私は必要なすべてのテンプレートを手動でインスタンス化しました。いくつかのデバッグprintf文をGCCコード自体に挿入する点を除いて、これを自動的に行う良い方法はないと思われます。

+0

てみました:?テンプレートのインスタンシエーションに関連するエラー(および「概念」の前 - まだ標準の一部ではありませんが)の作業に役立つようにもともと開発されていますが、それはあなたの価値があるかもしれません。私はアクティブな開発がしばらく前から止まっていたので、C++ 11固有の変更はないと思います。それ以外の場合は、独自の独自のテンプレートコンパイラを作成する必要があります。 – dirkgently

+0

ソースからGCCをビルドしましたか?私は多くのデバッグ・ダンプ・オプションを思い出しており、すべてのテンプレート・インスタンス化についてステータス・メッセージを得ることができるかもしれません。それは、しかし、ドライバをバイパスすることを含むかもしれません。 – Potatoswatter

答えて

0

GCC 4.7を使用しているので、コードに対してclangを実行できるシステムにいると仮定しています。 Clangのエラーメッセージ、特にテンプレートのエラーメッセージはかなりいいです。

 

    template 
    class Example { 
     Example(const T& t) : t_(t) {} 
     T& t_; 
    }; 

    int a; 
    Example e(a); 

出力:あなたはSTLFiltを

 

    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. 

+0

GCC 4.7はClangをどのように暗示していますか?その質問にはエラーのないコードが含まれています。 – Potatoswatter

+0

ああ、私は "私はいくつかのテンプレートコードからより良いエラーメッセージが必要です"ということを誤解しています。 –