
the following code does not compile with gcc 4.6.1:
#include <boost/fusion/view.hpp>
int main( int argc , char ** argv ) { return 0; }
It produces errors like this:
[snip]
/home/karsten/boost/boost_1_47_0/boost/fusion/view/nview/detail/nview_impl.hpp:55:57: error: overflow in constant expression [-fpermissive] /home/karsten/boost/boost_1_47_0/boost/fusion/view/nview/detail/nview_impl.hpp:55:57: note: in template argument for type ‘int’
I think I know what the problem is! The problem is that this line in fusion/view/nview/detail/nview_impl.hpp: , BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(FUSION_MAX_VECTOR_SIZE, int I, LONG_MAX)> expands to code like , int I0 = 2147483647L , int I1 = 2147483647L , int I2 = 2147483647L , int I3 = 2147483647L , int I4 = 2147483647L , int I5 = 2147483647L , int I6 = 2147483647L , int I7 = 2147483647L , int I8 = 2147483647L , int I9 = 2147483647L > Note that that's an "int I", but a "LONG_MAX". The OP must be using a system where int and long have different sizes, and so LONG_MAX is too large on an integer to be used as a default parameter for an int template argument. Joel and I don't see the issue because on our systems, int and long has the same size. The solution, then, would be to replace LONG_MAX with INT_MAX on that line. Regards, Nate