> On May 15, 2018, at 7:23 PM, Richard Smith <rich...@metafoo.co.uk> wrote:
> On 15 May 2018 at 16:01, John McCall via cfe-dev <cfe-...@lists.llvm.org 
> <mailto:cfe-...@lists.llvm.org>> wrote:
>> On May 15, 2018, at 6:05 PM, George Karpenkov via cfe-dev 
>> <cfe-...@lists.llvm.org <mailto:cfe-...@lists.llvm.org>> wrote:
>> 
>> +cfe-dev
>> 
>> Hi Andrea,
>> 
>> I think you might get more luck asking on the cfe-dev mailing list.
>> 
>> George
>> 
>>> On May 15, 2018, at 1:15 PM, Andrea Arteaga via cfe-users 
>>> <cfe-users@lists.llvm.org <mailto:cfe-users@lists.llvm.org>> wrote:
>>> 
>>> Dear all,
>>> Recently, my team suffered from a bug due to a double bad usage of C++.
>>> 
>>> We have a function returning a reference to an object:
>>> 
>>>     Object& GetObject();
>>> 
>>> Sometimes we use this function like this:
>>> 
>>>     auto obj = GetObject();
>>> 
>>> This triggers a copy of the object, which we really don't mean. The two 
>>> problems are:
>>> 1. Object does not delete the copy constructor, nor does it declare one. We 
>>> have a policy of never using implicitly-declared constructors, we either 
>>> use `=delete` or `=default`. Nevertheless we missed this class.
> 
> Implicitly-defined copy constructors are ubiquitous in idiomatic C++.  Maybe 
> that's not true in your project, but still, this seems too special-case for 
> the compiler.  Maybe a linter that has a more sophisticated model of what 
> code is yours vs. the standard library.
> 
>>> 2. A reference is demoted to a rvalue due to the usage of `auto` instead of 
>>> `auto&`.
> 
> This is a more reasonable thing to try to warn about.  I have two concerns:
>   - I don't know a reasonable way to suppress the warning if you really do 
> want to load from the l-value.
>   - I have a non-specific worry that it'll disrupt some important idiom that 
> I'm just not thinking of.
> 
> How about:
> 
>   vector<some_complex_type> v = get_vector();
>   auto x = v.front();
> 
> or, worse:
> 
>   auto y = get_vector().front();

Yep, good example.

John.
_______________________________________________
cfe-users mailing list
cfe-users@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-users

Reply via email to