kleinster Datentyp für Konstante -> mpl -> Fehler



  • Hallo,
    ich möchte für Zahlen in einem bestimmten Bereich den Besten Datentyp finden. Dies möchte ich per boost::mpl realisieren.
    Mein Ansatz:

    template<long long lMin,long long lMax>
    	class CGT
    {
    private:
    	typedef mpl::vector<
    			mpl::vector<mpl::integral_c<long long,CHAR_MIN>,
    				mpl::integral_c<long long,CHAR_MAX>,
    				char>,
    			mpl::vector<mpl::integral_c<long long,0>,
    				mpl::integral_c<long long,UCHAR_MAX>,
    				unsigned char>,
    			mpl::vector<mpl::integral_c<long long,SHRT_MIN>,
    				mpl::integral_c<long long,SHRT_MAX>,
    				short>,
    			mpl::vector<mpl::integral_c<long long,0>,
    				mpl::integral_c<long long,USHRT_MAX>,
    				unsigned short>,
    			mpl::vector<mpl::integral_c<long long,INT_MIN>,
    				mpl::integral_c<long long,INT_MAX>,
    				int>,
    			mpl::vector<mpl::integral_c<long long,0>,
    				mpl::integral_c<long long,UINT_MAX>,
    				unsigned int>,
    			mpl::vector<mpl::integral_c<long long,LONG_MIN>,
    				mpl::integral_c<long long,LONG_MAX>,
    				long>,
    			mpl::vector<mpl::integral_c<long long,0>,
    				mpl::integral_c<long long,ULONG_MAX>,
    				unsigned long>  >IntegralTypes_t;
    
    	typedef typename mpl::find_if<IntegralTypes_t,
    		typename mpl::and_<
    			typename mpl::less_equal<
    				typename mpl::at_c<typename mpl::_1,0>::type,
    					mpl::integral_c<long long,lMin> >,
    			typename mpl::greater_equal<
    				typename mpl::at_c<typename mpl::_1,1>::type,
    					mpl::integral_c<long long,lMax> > > >::type
    						pIntegralType_t;
    
    public:
    	typedef typename mpl::at_c<typename mpl::deref<pIntegralType_t>::type,2>::type type;	
    };
    

    Leider klappt dies so nicht 😞 Bei der Instanzierung meckert der Compiler (VC++ 😎 bei dem Code "typename mpl::at_c<typename mpl::_1,1>" mit dem Fehler "
    20>C:\Boost\include\boost-1_34_1\boost/mpl/next_prior.hpp(31) : error C2039: 'next' : is not a member of 'boost::mpl::void_'". "typename mpl::at_c<typename mpl::_1,0>" klappt dagegen wunderbar.

    Was ist falsch?


Anmelden zum Antworten