<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Thu, Apr 20, 2017 at 10:41 AM, Liu Hao <span dir="ltr"><<a href="mailto:lh_mouse@126.com" target="_blank">lh_mouse@126.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On 2017/4/20 19:20, Hubert Tong wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
It is hardly clear that the rvalue is of type unsigned long long (and<br>
not some special bit-field type).<br>
See <a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1260.htm" rel="noreferrer" target="_blank">http://www.open-std.org/jtc1/s<wbr>c22/wg14/www/docs/n1260.htm</a>.<br>
I have been unable to find further discussion of the issue after<br>
<a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1270.pdf" rel="noreferrer" target="_blank">http://www.open-std.org/jtc1/s<wbr>c22/wg14/www/docs/n1270.pdf</a>.<br>
</blockquote>
<br></span>
You are right. Let's assume such an implementation exists, and despite that type, the result doesn't change: The (indeterminate) value is merely truncated earlier, yielding the same value after it is stored into the bit-field member.<br></blockquote><div>Where the implementation divergence occurs is when the value is not stored back into the bit-field member.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
I also doubt the existence of such an implementation: <a href="http://6.7.2.1/4" rel="noreferrer" target="_blank">6.7.2.1/4</a> doesn't say bit-field types need exist. Their occurrence also lead to problems: Would people benefit from it? What will happen if such an rvalue is passed to a function taking variable arguments? What will `sizeof(it+1)` where `it` has a bit-field type?<span class="HOEnZb"><font color="#888888"><br></font></span></blockquote><div>I agree that it leads to problems. This is the reason why I had the cast to unsigned long long in my code example (which does demonstrate the existence of such an implementation, namely GCC): because, without the cast, the argument may not match with the conversion specification.<br><br></div><div>I think answering these questions is a job for WG 14 (the C committee).<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="HOEnZb"><font color="#888888">
<br>
<br>
-- <br>
Best regards,<br>
LH_Mouse<br>
<br>
</font></span></blockquote></div><br></div></div>