trance/typeinfo.hppは壊滅的に使いづらいだろうことは自明なので
xvalue(prvalue)つくりまくるバージョンの楽につかえるやつを追加しました。
#include <iostream> using namespace std; #include <trance/typeinfo.hpp> int main() { cout << TRANCE_TYPEID( int ).demangled_name() << endl << TRANCE_TYPEID( 0 ).demangled_name() << endl; }
で、
int int
と表示されるはずです。但し、重要な問題があって、prvalueなので寿命の問題がつきまといます。
const T &に束縛すればええやんてなりますが、任意の名前空間に吸い込まれていくと悲しいのでstatic_castで囲ってる関係上、prvalueでなくxvalueが返ってくることになってしまいます。
これどうしましょう・・・って感じなんですが、const type_info &を使い回す人間が果たしてどれぐらいいるかってなるとそれほどいないと思うので、楽観的に見てます。
使い回したかったら従来のTRANCE_TYPEID_BY_(TYPE|EXPR)使ってくださいってなります。
そもそもtype_idとexprが混在するコードはC++では書けないので、コード書いてる時点でどちらかに絞れるはずなので、まぁ大丈夫でしょう。(その後彼の姿を見たものはいなかった...