サンプルの動作確認バージョン [GCC4.4/1.41.0] [VC9/1.41.0]
#include <iostream>
#include <typeinfo>
#include <boost/typeof/typeof.hpp>
using namespace std;
int main()
{
cout << typeid(BOOST_TYPEOF(1+2.34)).name() << endl;
BOOST_AUTO(x, 1 + 2.34);
// BOOST_TYPEOF(1 + 2.34) x = 1 + 2.34; と同じ。つまり
// double x = 1 + 2.34 と同じ。
}
double
C++には、式の型のサイズを取得するsizeofという演算子があります。 gcc等のコンパイラでは独自拡張として、式の型そのものを取得するtypeofという演算子が用意されています。 Boost.Lambdaを使ったときなど、 とても手では書ききれないような型の式の途中結果を一時変数に代入したくなるので、そんな時に便利です。
Boost.Typeofライブラリは、typeof拡張がある環境ではtypeofをラップし、 そうでない環境ではできるだけtypeofをエミュレートしようと頑張ってくれるライブラリです。 エミュレートが完全ならば文句なしなのですが、typeof拡張がない場合、 ユーザー定義の型やテンプレートをライブラリにいちいち登録しないといけなかったりして、 まだちょっと不便かな、というのが個人的な感想です。