[cfe-commits] libc++ and const expr.
Howard Hinnant
hhinnant at apple.com
Sat Feb 4 10:19:57 PST 2012
On Feb 4, 2012, at 1:16 PM, Sebastian Redl wrote:
>
> On 04.02.2012, at 19:06, Howard Hinnant wrote:
>
>> On Feb 4, 2012, at 12:52 PM, Howard Hinnant wrote:
>>
>>> On Feb 4, 2012, at 12:04 PM, Eli Friedman wrote:
>>>>
>>>> [expr.shift]p2: [...] if E1 has a signed type and non-negative value,
>>>> and E1×2E2 is representable in the result type, then that is the
>>>> resulting value; otherwise, the behavior is undefined.
>>>>
>>>> -Eli
>>>
>>> I see, you're point is that I've walked into undefined territory because I set the sign bit on the long long? Does changing 1LL to 1ULL make the compiler happy?
>>
>> Another question: Is there a motivation for giving the compile time behavior of these operations a different behavior than they would have at run time?
>
> The runtime behavior is undefined. Do you really want the compile time behavior to be the same?
>
> As a side note, I think the diagnostics here could still be improved.
>
> Sebastian
It is undefined by the standards committee which has not had the willpower to abandon 1's complement hardware. I believe it is well defined behavior on every platform we support (2's complement hardware). I believe this compile time behavior is overly pedantic, does not reveal any programming error, and will only serve up busy work for clang's clients.
Howard
More information about the cfe-commits
mailing list