Trance.TypeInfoを改良
https://github.com/Flast/trance/blob/master/trance/typeinfo.hpp
といっても http://d.hatena.ne.jp/RiSK/20110504/1304495091 をもとにデマングル失敗時に例外を投げるように修正する程度ですが。
あと、TRANCE_TYPEIDを修正してconst prvalueを返すようにしました。これでdtorが呼ばれる心配は無いです。
#include <iostream> #include <trance/typeinfo.hpp> int main() try { TRANCE_TYPEID( int ); } catch ( trance::bad_typeid &e ) { // できるだけこいつを処理して欲しい // 具体的な例外内容はe.what()にあります。 std::cout << e.what() << std::endl; // 例外内容を型で欲しい場合は try { e.rethrow_composite_error(); } catch ( std::bad_alloc & ) {} catch ( std::invalid_argument & ) {} catch ( std::logic_error & ) {} // で処理できます。 } catch ( std::... &e ) { // std::の例外を直接受け取ることもできますが、他のと混ざったりすると面倒なので、 // TRANCE_TYPEID系が失敗したとわかるようにtrance::bad_typeidをとることをおすすめします。 // ちなみにwhatに具体的なエラー内容は出ないです。trance::bad_typeidを採るよう促します。 std::cout << e.what() << std::endl; }
あ、コードにほとんど書いたので察してください。