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,,,