2011-10-22 133 views
2

此代碼與Visual C++ 11 Developer Preview編譯良好,但不會使用gcc 4.6.1進行編譯。升級或不升級 - 這是questiion

如何使後者「可編譯」?

#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 

,然後在主:

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

回答

4

更改您的include指令:

#include <boost/mpl/vector.hpp> 

這將工作都在Windows和Unix類系統。

沒有檢測到其他語法問題(但由於這只是一個模板,我不知道實際使用時是否存在問題)。

編輯:你在主要添加的東西,它編譯與GCC 4.6.1。
別忘了#include <typeinfo>

+0

很好的發現,我永遠不會記得哪個斜槓是'正確的'。現在確實有效。謝謝。 – smallB

+0

你會經常在Windows上使用'/',但在基於Unix的系統上,你基本上從不會使用任何工具來使用\。 (順便說一句,包含指令是如何處理的,我相信是實現定義的,所以都不是安全的。) – Mat