Продвигать или не продвигать - это вопрос - PullRequest
2 голосов
/ 22 октября 2011

Этот код прекрасно компилируется с 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  

, а затем в основном:

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

1 Ответ

4 голосов
/ 22 октября 2011

Измените ваши директивы включения:

#include <boost/mpl/vector.hpp>

Это будет работать как в Windows, так и в Unix-системах.

Никаких других проблем с синтаксисом не обнаружено (но поскольку это всего лишь шаблон, я понятия не имею, возникают ли проблемы при его использовании).

Редактировать: с тем, что вы добавляете в основной, он компилируется с GCC 4.6.1.
Не забудьте #include <typeinfo>.

...