[cfe-dev] Error when testing clang with VC++ RTL and Boost MPL

Jordan Rose jordan_rose at apple.com
Wed Nov 13 11:59:14 PST 2013


On Nov 13, 2013, at 11:47 , Edward Diener <eldlistmailingz at tropicsoft.com> wrote:

> On 11/13/2013 9:46 AM, Edward Diener wrote:
>> I am seeing this error when testing Boost MPL with clang using the VC++
>> RTL:
>> 
>> "bitwise.cpp(40,25) :  error: non-type template argument evaluates to
>> 4294967295, which cannot be narrowed to type 'long' [-Wc++11-narrowing]
>> MPL_ASSERT_RELATION( (bitor_<_0,_ffffffff>::value), ==, 0xffffffff );"
>> 
>> The typedefs are:
>> 
>> typedef integral_c<unsigned int, 0> _0;
>> typedef integral_c<unsigned int, 0xffffffff> _ffffffff;
>> 
>> The bitor_ in the Boost MPL is evaluating constants at compile time,
>> doing a bitwise or ('|').
>> 
>> Why does clang think that 0xffffffff is a 'long' when used in the
>> comparison ? According to the C++ standard the type of 0xffffffff is the
>> first of int, unsigned int, long, unsigned long, long long, unsigned
>> long long in which its value can fit ( section 2.14.2 ). Is this a clang
>> bug ?
> 
> Sorry, the problem is not as I had assumed above. It is actually because the MPL_ASSERT_RELATION macro devolves down to a template class where the values are of type 'long'. Is there something in C++11 which says that implicit conversion of a value from an 'unsigned int' to a 'long' is illegal ? That is what clang is telling me but I can find no such restriction in the C++11 standard regarding this.

I think it’s more likely that on Windows ‘long’ is the same size as ‘int’, and so you have an overflow error. You need to fix the template…which I guess means submitting a patch to Boost.

If you’re just looking for a quick workaround, though, the presence of “-Wc++11-narrowing” in the error message is a hint: you can demote this no a warning using -Wno-error=c++11-narrowing.

Jordan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20131113/c6257a6c/attachment.html>


More information about the cfe-dev mailing list