<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Hi, list. I came across this as an analyzer false positive, but as I read the C++ standard this is actually illegal. Can a standards expect weigh in here?<div><br></div><div>void use(int *);</div><div>void test() {</div><div>  int x[8];</div><div>  use(reinterpret_cast<int * const &>(x));</div><div>}</div><div><br></div><div>Here's the relevant portion of the standard, [expr.reinterpret.cast]p1:</div><div><span style="font-size: 10pt; font-family: LMRoman10; "><br></span></div><div><blockquote type="cite"><span style="font-size: 10pt; font-family: LMRoman10; ">The result of the expression </span><span style="font-size: 10pt; font-family: LMMono10; ">reinterpret_cast<T>(v) </span><span style="font-size: 10pt; font-family: LMRoman10; ">is the result of converting the expression </span><span style="font-size: 10pt; font-family: LMMono10; ">v </span><span style="font-size: 10pt; font-family: LMRoman10; ">to type
</span><span style="font-size: 10pt; font-family: LMMono10; ">T</span><span style="font-size: 10pt; font-family: LMRoman10; ">. If </span><span style="font-size: 10pt; font-family: LMMono10; ">T </span><span style="font-size: 10pt; font-family: LMRoman10; ">is an lvalue reference type or an rvalue reference to function type, the result is an lvalue; if </span><span style="font-size: 10pt; font-family: LMMono10; ">T </span><span style="font-size: 10pt; font-family: LMRoman10; ">is an
rvalue reference to object type, the result is an xvalue; otherwise, the result is a prvalue and the lvalue-to-
rvalue (</span><span style="font-size: 10pt; font-family: LMRoman10; color: rgb(0, 0, 255); ">4.1</span><span style="font-size: 10pt; font-family: LMRoman10; ">), array-to-pointer (</span><span style="font-size: 10pt; font-family: LMRoman10; color: rgb(0, 0, 255); ">4.2</span><span style="font-size: 10pt; font-family: LMRoman10; ">), and function-to-pointer (</span><span style="font-size: 10pt; font-family: LMRoman10; color: rgb(0, 0, 255); ">4.3</span><span style="font-size: 10pt; font-family: LMRoman10; ">) standard conversions are performed on the
expression </span><span style="font-size: 10pt; font-family: LMMono10; ">v</span><span style="font-size: 10pt; font-family: LMRoman10; ">. Conversions that can be performed explicitly using </span><span style="font-size: 10pt; font-family: LMMono10; ">reinterpret_cast </span><span style="font-size: 10pt; font-family: LMRoman10; ">are listed below. No
other conversion can be performed explicitly using </span><span style="font-size: 10pt; font-family: LMMono10; ">reinterpret_cast</span><span style="font-size: 10pt; font-family: LMRoman10; ">. </span></blockquote></div><div><br></div><div>As I read this, the standard conversions only apply to the prvalue case, and the lvalue reference target type means this is the lvalue case. Does that seem right?</div><div><br></div><div>If so, I'll go file a PR. Thanks!</div><div>Jordan</div></body></html>