Dear Boosters, I have encountered problems when I tried to use current Boost Random Number Library on SGI machine with MPIPpro Compiler 7.3.1.3m. One error message is
cc-1522 CC: ERROR File = src/boost/boost/random/uniform_smallint.hpp, Line = 179 The symbol template parameter "boost::detail::uniform_smallint<(bool)std::numeric_limits<URNG1::res ult_type>::is_integer>::impl" cannot have a template argument list. typedef typename detail::uniform_smallint<std::numeric_limits<typename UniformRandomNumberGenerator::result_type>::is_integer>::impl<UniformRandomNumberGenerator, IntType>::type impl_type; This seems due to the lack of BOOST_NESTED_TEMPLATE macro in front of impl. The header random/uniform_int.hpp also has this problem. Here is a patch for fixing this problem: -------------------------------------------------------------------------- diff -crN boost.orig/boost/random/uniform_int.hpp boost/boost/random/uniform_int.hpp *** boost.orig/boost/random/uniform_int.hpp Tue Nov 5 07:07:23 2002 --- boost/boost/random/uniform_int.hpp Thu Dec 12 12:18:24 2002 *************** *** 205,211 **** { private: #ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS ! typedef typename detail::uniform_int<std::numeric_limits<typename UniformRandomNumberGenerator::result_type>::is_integer>::impl<UniformRandomNumberGenerator, IntType>::type impl_type; #else BOOST_STATIC_CONSTANT(bool, base_float = (boost::is_float<typename UniformRandomNumberGenerator::result_type>::value == false)); typedef typename detail::uniform_int<base_float>::BOOST_NESTED_TEMPLATE impl<UniformRandomNumberGenerator, IntType>::type impl_type; --- 205,211 ---- { private: #ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS ! typedef typename detail::uniform_int<std::numeric_limits<typename UniformRandomNumberGenerator::result_type>::is_integer>::BOOST_NESTED_TEMPLATE impl<UniformRandomNumberGenerator, IntType>::type impl_type; #else BOOST_STATIC_CONSTANT(bool, base_float = (boost::is_float<typename UniformRandomNumberGenerator::result_type>::value == false)); typedef typename detail::uniform_int<base_float>::BOOST_NESTED_TEMPLATE impl<UniformRandomNumberGenerator, IntType>::type impl_type; diff -crN boost.orig/boost/random/uniform_smallint.hpp boost/boost/random/uniform_smallint.hpp *** boost.orig/boost/random/uniform_smallint.hpp Tue Nov 5 07:07:23 2002 --- boost/boost/random/uniform_smallint.hpp Thu Dec 12 12:18:53 2002 *************** *** 176,182 **** { private: #ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS ! typedef typename detail::uniform_smallint<std::numeric_limits<typename UniformRandomNumberGenerator::result_type>::is_integer>::impl<UniformRandomNumberGenerator, IntType>::type impl_type; #else BOOST_STATIC_CONSTANT(bool, base_float = (boost::is_float<typename UniformRandomNumberGenerator::result_type>::value == false)); typedef typename detail::uniform_smallint<base_float>::BOOST_NESTED_TEMPLATE impl<UniformRandomNumberGenerator, IntType>::type impl_type; --- 176,182 ---- { private: #ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS ! typedef typename detail::uniform_smallint<std::numeric_limits<typename UniformRandomNumberGenerator::result_type>::is_integer>::BOOST_NESTED_TEMPLATE impl<UniformRandomNumberGenerator, IntType>::type impl_type; #else BOOST_STATIC_CONSTANT(bool, base_float = (boost::is_float<typename UniformRandomNumberGenerator::result_type>::value == false)); typedef typename detail::uniform_smallint<base_float>::BOOST_NESTED_TEMPLATE impl<UniformRandomNumberGenerator, IntType>::type impl_type; -------------------------------------------------------------------------- Another problem is concerening boost_static_assert, e.g. cc-3354 CC: ERROR File = src/boost.orig/boost/random/linear_feedback_shift.hpp, Line = 57 A non-integral operation is not allowed in a nontype template argument. BOOST_STATIC_ASSERT(!std::numeric_limits<UIntType>::is_signed); ^ cc-1070 CC: ERROR File = src/boost.orig/boost/random/linear_feedback_shift.hpp, Line = 57 The indicated type is incomplete. BOOST_STATIC_ASSERT(!std::numeric_limits<UIntType>::is_signed); ^ This problem looks the same as that in VC7. However, I found the workaround for VC7 recently added to boost_static_assert.hpp does not solve this problem for SGI MIPSpro. A possible workaround is as follows: -------------------------------------------------------------------------- diff -crN boost.orig/boost/static_assert.hpp boost/boost/static_assert.hpp *** boost.orig/boost/static_assert.hpp Mon Sep 16 10:19:05 2002 --- boost/boost/static_assert.hpp Thu Dec 12 13:37:42 2002 *************** *** 72,77 **** --- 72,86 ---- # define BOOST_STATIC_ASSERT( B ) \ typedef char BOOST_JOIN(boost_static_assert_typedef_, __LINE__) \ [ ::boost::STATIC_ASSERTION_FAILURE< (bool)( B ) >::value ] + #elif defined(__sgi) + // workaround for SGI MIPSpro compiler + #define BOOST_STATIC_ASSERT( B ) \ + BOOST_STATIC_CONSTANT(bool, \ + BOOST_JOIN(boost_static_assert_test_, __LINE__) = ( B )); \ + typedef ::boost::static_assert_test<\ + sizeof(::boost::STATIC_ASSERTION_FAILURE< \ + BOOST_JOIN(boost_static_assert_test_, __LINE__) >)>\ + BOOST_JOIN(boost_static_assert_typedef_, __LINE__) #else // generic version #define BOOST_STATIC_ASSERT( B ) \ -------------------------------------------------------------------------- Best regards, Synge Todo [EMAIL PROTECTED] _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost