[PATCH] D30547: [clang-tidy] Forwarding reference overload in constructors

Jonas Toth via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Sat Mar 4 04:08:56 PST 2017


JonasToth added inline comments.


================
Comment at: docs/clang-tidy/checks/misc-forwarding-reference-overload.rst:38
+constructors. We suppress warnings if the copy and the move constructors are both
+disabled (deleted or private), because there is nothing the prefect forwarding
+constructor could hide in this case. We also suppress warnings for constructors
----------------
typo: prefect -> perfect


================
Comment at: test/clang-tidy/misc-forwarding-reference-overload.cpp:21
+  Person(T &&n);
+  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: function 'Person' can hide copy and move constructors [misc-forwarding-reference-overload]
+
----------------
leanil wrote:
> JonasToth wrote:
> > could the check output a note when there was a userdefined constructor and point to that one if it gets hidden? that would make it clearer, what and how the problem occurs. 
> What do you mean by "if it gets hidden"? Should I look for specific calls that are hijacked by the perfect forwarding ctor? Or just make a note on the user defined copy/move ctors any time I produce a warning (without looking at actual calls)?
> I think the former would be quite tricky to do.
> Also, what if the perfect forwarding ctor hides the compiler generated copy/move? Should I still make a note (maybe pointing to the class itself)?
```
class Person {
public:
  // perfect forwarding ctor
  template<typename T>
  explicit Person(T&& n) {}

  // (possibly compiler generated) copy ctor
  Person(const Person& rhs); 
};
```

a note pointing to a user defined ctor would be good i think.
with compiler generated operations the warning is clear.

emitting such a note would be a minor feature and if too complicated not worth it, i guess.


Repository:
  rL LLVM

https://reviews.llvm.org/D30547





More information about the cfe-commits mailing list