> On May 15, 2018, at 6:05 PM, George Karpenkov via cfe-dev 
> <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.
But those are concerns that we could explore during iterative design and 
implementation.

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

Reply via email to