Hi,

what's the current status on using MPL on different compilers? I have looked
at http://www.mywikinet.com/mpl/log.html but it seems not all meta-functions
are listed there.

I'm currently porting a library from Intel to GCC, MSVC7.0 and BorlandC-5.5
and running into some problems. GCC is doing relatively okay. I'm moving
from Borland-5.5 to 6.x soon, so I probably won't even bother with that one.
So that leaves MSVC 7.0. However, compiling even relatively simple
templates, I get errors pointing in the MPL source-code (which is a problem
with MSVC, not with the actual sourcecode of course).

Note, I'm not even instantiating anything yet, this is just the first-phase
compilation of a template definition. For example, consider:

/*!
    \brief Meta function, returns the number of bits equal to
            1 in a given number.
    \param N Some number. Concept: boost::mpl::integral_c
    \retval ::type boost::mpl::integral_c< size_t, Number of bits equal
                                                                     to 1 in
N >
*/
template < typename N >
struct num_bits_set
{
    private:

    template < typename Number >
    struct recurse
    {

    private:
        BOOST_STATIC_CONSTANT( typename Number::value_type,
                                                         shift_right_value =
N::value >> 1 );
        BOOST_STATIC_CONSTANT( typename Number::value_type,
                                                        last_bit_set_value =
N::value & 1 );
        typedef mpl::integral_c< size_t, last_bit_set_value > next_value;

    public:

        typedef typename mpl::plus<
                next_value,
                typename num_bits_set<
                    mpl::integral_c<
                        typename Number::value_type,
                        shift_right_value > >::type
        >::type type;
    };

    public:
        typedef typename mpl::apply_if<
                typename mpl::equal_to<
                    N,
                    mpl::integral_c<
                            typename N::value_type,
                            0 >
                >::type,
                mpl::integral_c< size_t, 0 >,
                recurse< N >
      >::type type;
};

Compiling this on MSVC 7.0 gives me the following errors:

e:\library\boost_1_29_0\boost\mpl\arithmetic\plus.hpp(60) : error C2975:
'boost::mpl::plus_c' : invalid template argument for 'N2', constant
expression expected
e:\library\boost_1_29_0\boost\mpl\arithmetic\plus.hpp(41) : see declaration
of 'boost::mpl::plus_c'
e:\projects\boost_1_29_0\boost\math\clifford\aux_.hpp(123) : see reference
to class template instantiation 'boost::mpl::plus<T1,T2,T3,T4,T5>' being
compiled
with
[
T1=boost::math::clifford::aux::num_bits_set<N>::recurse<<template
parameter>>::next_value,
T2=,
T3=boost::mpl::integral_c<int,0>,
T4=boost::mpl::integral_c<int,0>,
T5=boost::mpl::integral_c<int,0>
]
e:\projects\boost_1_29_0\boost\math\clifford\aux_.hpp(113) : see reference
to class template instantiation
'boost::math::clifford::aux::num_bits_set<N>::recurse<<template parameter>>'
being compiled
e:\projects\boost_1_29_0\boost\math\clifford\aux_.hpp(132) : see reference
to class template instantiation
'boost::math::clifford::aux::num_bits_set<N>' being compiled
e:\library\boost_1_29_0\boost\mpl\arithmetic\plus.hpp(61) : error C2504:
'boost::mpl::plus_c<T,N1,N2,N3,N4,N5>' : base class undefined
with
[
T=long,
N1=1,
N2=0,
N3=value,
N4=value,
N5=value
]
e:\projects\boost_1_29_0\boost\math\clifford\aux_.hpp(123) : error C2039:
'type' : is not a member of 'boost::mpl::plus<T1,T2,T3,T4,T5>'
with
[
T1=boost::math::clifford::aux::num_bits_set<N>::recurse<<template
parameter>>::next_value,
T2=,
T3=boost::mpl::integral_c<int,0>,
T4=boost::mpl::integral_c<int,0>,
T5=boost::mpl::integral_c<int,0>
]

Anyway, any hints for the above would be appreciated, but the actual
question is: is it worth it spending a lot of time on an MSVC7 port, or is
this an effort doomed to fail from the start? I suppose this is hard to
answer without knowing the library details and the target-audience, but
considering I'm doing some rather complicated MPL stuff it is going to be
one hell of a ride.

Mmm, perhaps I'm better of waiting for the PTS supporting MSVC update. If
not, any strategies or advice for tackling common problems with MPL on MSVC?

Thanks,

Jaap Suter






_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to