aaron.ballman added a comment.

In https://reviews.llvm.org/D30610#934891, @malcolm.parsons wrote:

> I have 1000s of warnings from this check.
>
> A lot of them are about google tests:
>  warning: class 'Foo_Bar_Test' defines a copy constructor and a copy 
> assignment operator but does not define a destructor 
> [cppcoreguidelines-special-member-functions]
>  I'd like an option to suppress these.
>
> It warns about classes that use boost::noncopyable:
>  warning: class 'Foo' defines a non-default destructor but does not define a 
> copy constructor or a copy assignment operator 
> [cppcoreguidelines-special-member-functions]
>  class Foo : boost::noncopyable
>  I think this is a bug in the check.


It is not a bug in the check; the check implements the C++ Core Guideline rule. 
Hence the comment about discussing it with them.

I think your use cases are compelling and might warrant an option. However, 
with that in mind combined with `AllowMissingMoveFunctions`, it makes me think 
this check should not have any of the options -- it's a sign that your code 
base isn't ready to comply with C.21 in C++ Core Guidelines. The wording for 
the guideline is pretty specific about what the authors intend: "Compilers 
enforce much of this rule and ideally warn about any violation." and its 
enforcement "(Simple) A class should have a declaration (even a =delete one) 
for either all or none of the special functions." I'm not saying we shouldn't 
add this option you're looking for, but I'm still a bit uncomfortable with 
coming up with option combinations that effectively disable the entire point to 
a check in a coding standard -- that's why we allow you to disable the check 
more visibly.

> In https://reviews.llvm.org/D30610#934862, @fgross wrote:
> 
>> My 2 cents on this one: Even with `AllowMissingMoveFunctions=1` at least the 
>> missing destructor definition should be diagnosed, because it violates the 
>> classic rule of three. If you delete your copy operations, you likely have 
>> some resources that need to be taken care of in your destructor, so this 
>> piece of code would worry me. Better be clear about it and explicitly 
>> default the destructor.
> 
> 
> This is a rule of zero class, but with copying disabled; the resources are 
> just as safe as with a normal rule of zero class.

Depending on the resource; you might allocate a resource in the constructor, 
deleted copy (and thus no move) operators, but still want to release the 
resource in the destructor.


https://reviews.llvm.org/D30610



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

Reply via email to