[cfe-dev] [cfe-users] Warnings for implicit constructors and wrong usage of auto

Richard Smith via cfe-dev cfe-dev at lists.llvm.org
Tue May 15 16:23:29 PDT 2018


On 15 May 2018 at 16:01, John McCall via cfe-dev <cfe-dev at lists.llvm.org>
wrote:

> On May 15, 2018, at 6:05 PM, George Karpenkov via cfe-dev <
> cfe-dev at 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 at 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();

But those are concerns that we could explore during iterative design and
> implementation.
>
> John.
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20180515/8fb10432/attachment.html>


More information about the cfe-dev mailing list