2011-10-22 16 views
2

このコードはVisual C++ 11 Developer Previewでうまくコンパイルされますが、gcc 4.6.1ではコンパイルされません。昇格または昇格しない - それはクエストです

「コンパイル可能」にするには?メインで

#ifndef PROMOTE_H_INCLUDED 
#define PROMOTE_H_INCLUDED 
#include <boost\mpl\vector.hpp> 
#include <boost\mpl\find.hpp> 
#include <boost\mpl\next.hpp> 
#include <boost\mpl\deref.hpp> 

namespace mpl = boost::mpl; 
template<class Integral> 
struct Promote 
{ 
    typedef mpl::vector<char,short,int,long,long long> types; 
    typedef typename mpl::find<types,Integral>::type this_type; 
    typedef typename mpl::next<this_type>::type next_type; 
    typedef typename mpl::deref<next_type>::type type; 
}; 
#endif // PROMOTE_H_INCLUDED 

、その後は:これは、WindowsとUnix系システムの両方で動作します

#include <boost/mpl/vector.hpp> 

cout << typeid(Promote<int>::type).name() ; 

答えて

4

変更は、あなたのディレクティブが含まれています。

他の構文の問題は検出されません(しかし、これは単なるテンプレートなので、実際に使用するときに問題があるかどうかはわかりません)。

編集:メインに追加するものをGCC 4.6.1でコンパイルします。
#include <typeinfo>を忘れないでください。

+0

よく尋ねると、「正しい」スラッシュは決して覚えられません。そして、実際に今は動作します。ありがとう。 – smallB

+0

Windowsで '/'を使うのはかなりの時間を要しますが、Unixのようなシステムでは\を使って作業することはほとんどありません。 (BTW、インクルードディレクティブの処理方法は実装定義のため、普遍的に安全ではありません) – Mat

関連する問題