[ub] Proposal: make self-initialized references ill-formed (C++17?)

Richard Smith richardsmith at google.com
Thu Sep 18 21:42:34 CEST 2014


On 13 September 2014 06:52, John Zwinck <jzwinck at gmail.com> wrote:

> I recently happened upon some code which, boiled down to its essence, was
> like this:
>
>   for (int ii = 0; ii < 1; ++ii)
>   {
>     const std::string& str = str; // !!
>     std::cout << str << std::endl;
>   }
>
> My to my surprise, this code compiled (and produced a segfault at
> runtime).  I say surprise because I had all warnings enabled (as errors) in
> GCC 4.7 and 4.9, yet there was no complaint.  I got a good answer from
> Jonathan Wakely (http://stackoverflow.com/a/25720743/4323) explaining why
> GCC failed to catch it, but this got me thinking: why does C++ allow this
> at all?
>
> So, a proposal: perhaps in C++17 we could declare that self-initialized
> references are ill-formed.  I did consider whether this might impact
> existing code; the only use case that came to mind might be SFINAE, though
> I surely have never seen it used that way.
>

FYI, this is core issue 504:

http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#504


> I would appreciate any thoughts on this, and hope I have come to the right
> place to discuss it.
>
> _______________________________________________
> ub mailing list
> ub at isocpp.open-std.org
> http://www.open-std.org/mailman/listinfo/ub
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.open-std.org/pipermail/ub/attachments/20140918/06428d66/attachment.html 


More information about the ub mailing list