id summary reporter owner description type status milestone component version severity resolution keywords cc 9647 BOOST_MPL_ASSERT_RELATION fails to properly handle unsigned types Robert Ramey Aleksey Gurtovoy "boost/integer_traits.hpp contains the following {{{ template<> class integer_traits : public std::numeric_limits, public detail::integer_traits_base { }; }}} Problem is that, at least on Clang ULONG_MAX resolves to (through ) to be {{{ #define ULONG_MAX (__LONG_MAX__ *2UL+1UL) }}} But when __LONG_MAX__ resolves to long and the rules of arithmetic promotion result in the expression __LONG_MAX__ *2UL+1UL being a long rather than unsigned long. This causes some funky behavior in cases like: {{{ BOOST_MPL_ASSERT_RELATION( (boost::integer_traits::const_max), >, (boost::integer_traits::const_max) ); }}} which fails to compile with ""Non-type template argument evaluates to 4294967295, which cannot be narrowed to type 'long'" Bugs new To Be Determined mpl Boost 1.54.0 Problem