[cfe-commits] libc++ and const expr.
Howard Hinnant
hhinnant at apple.com
Sat Feb 4 11:46:05 PST 2012
On Feb 4, 2012, at 2:27 PM, Joerg Sonnenberger wrote:
> On Sat, Feb 04, 2012 at 11:53:28AM -0500, Howard Hinnant wrote:
>> But I note the crux of this issue appears to be that this:
>>
>> static const intmax_t nan = (1LL << (sizeof(intmax_t) * CHAR_BIT - 1));
>>
>> is no longer consider a compile time constant expression.
>
> Ignoring the question of whether clang should allow that or not, why
> aren't you using the more compact statement below, which is just as
> portable:
>
> static const intmax_t -~(intmax_t)0;
That gives the value 1. These expressions are forming the value 0x8000000000000000.
That being said, I have no doubt that this can be fixed in libc++. It won't be easy, because this issue occurs in many more places than just <ratio>. And I actually haven't decided how I would fix it. But I'm sure it can be done.
The real issue is that I believe this code to be sufficient common as to irritate a sufficient number of customers. And this despite the fact that the code is well-defined on all hardware clang will ever target. On modern platforms there is only a left shift, not a signed left shift and unsigned left shift. Or if there is a distinction, the two are synonyms.
Howard
More information about the cfe-commits
mailing list