Hi, I'm having the following problem (?) with mpl::integral_c. Since it is intended to encapsulate an "Integral Constant", I thought that it somewhat superseded BOOST_STATIC_CONSTANT. IOWs, I figured that if I have something of the form:
struct X { BOOST_STATIC_CONSTANT( Type, ID = Val ) ; } ; it could be rewritten as: struct X { mpl::integral_c<Type,Val> ID ; } ; The benefit is that X::ID becomes a lot more usable on those compilers with poor non-type template parameter support. Specifically, I designed the traits class of the Numeric Conversion Library to expose mpl::integral_c and mpl::bool_c in place of BOOST_STATIC_CONSTANT for its different value fields. So, first of all, do you agree that the mpl form is better? Unfortunately, while I was just about to release the library for formal review, I tested it with gcc3.2 and stumped into the following: The conversion traits class exposes integral constant expressions of _enumeration_ type; however, according to my attempts, mpl::integral_c<> cannot be used with enumeration types on gcc3.2 as the following short test shows: #include<iostream> #include "boost/mpl/integral_c.hpp" enum LETTERS { a,b,c } ; int main() { typedef boost::mpl::integral_c<LETTERS,a> A ; LETTERS v = A::value ; } /cygdrive/c/boost/boost/boost/mpl/integral_c.hpp: In instantiation of `boost::mpl::integral_c<LETTERS, a>': /cygdrive/c/boost/boost/libs/numeric/conversion/test/short_test1.cpp:60: instantiated from here /cygdrive/c/boost/boost/boost/mpl/integral_c.hpp:56: invalid conversion from ` int' to `LETTERS' /cygdrive/c/boost/boost/boost/mpl/integral_c.hpp: In instantiation of `boost::mpl::integral_c<LETTERS, a>': /cygdrive/c/boost/boost/libs/numeric/conversion/test/short_test1.cpp:60: instantiated from here /cygdrive/c/boost/boost/boost/mpl/integral_c.hpp:57: invalid conversion from ` int' to `LETTERS' The errors show that the problem is related to the definition of next,prior: typedef integral_c<T, (value + 1)> next; typedef integral_c<T, (value - 1)> prior; Solution: There are two possibilities AFAICT: (a) since there is int_c<> already, remove next/prior from integral_c altoghether. (b) add a special enum_c<>. What do you think? -- Fernando Cacciola _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost