此代码可以使用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
然后在main:
cout << typeid( Promote<int>::type).name() ;
答案 0 :(得分:4)
更改您的include指令:
#include <boost/mpl/vector.hpp>
这适用于Windows和Unix类型的系统。
没有检测到其他语法问题(但由于这只是一个模板,我不知道实际使用时是否存在问题。)
编辑:使用您在主要内容中添加的内容,它将使用GCC 4.6.1进行编译
不要忘记#include <typeinfo>
。