[cfe-dev] Missing warning when binding to const ref?

Nikola Smiljanic popizdeh at gmail.com
Tue Apr 7 20:04:23 PDT 2015


I should have made a better comment, the types are different! Parameter
needs to be implicitly converted to int, and we're binding a a const ref to
this temp object whose lifetime ends once S is constructed. Unless I'm
mistaken.

On Wed, Apr 8, 2015 at 1:01 PM, Daniel Dilts <diltsman at gmail.com> wrote:

>
>
> On Tue, Apr 7, 2015 at 6:11 PM, Nikola Smiljanic <popizdeh at gmail.com>
> wrote:
>
>> I'm surprised this doesn't produce a warning:
>>
>> struct S
>> {
>> S(const int& i) : i(i) {}
>> const int& i;
>> };
>>
>> void foo(long l)
>> {
>> S s(l); // binding a const ref to temporary
>> }
>>
>> int main()
>> {
>> foo(1l);
>> }
>>
>>
>> Why would that produce a warning?  You can bind an r-value to a const
> l-value reference.  And, function foo takes the parameter by value, so it
> is passing an l-value to the constructor of S.
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20150408/96436a70/attachment.html>


More information about the cfe-dev mailing list