class 违反三(五)规则时的编译器警告

Compiler warning when a class breaks rule-of-three (five)

当 class 违反三规则(或五规则)时是否可能触发编译器警告?

此功能听起来很容易实现,并且在安全关键软件中非常有用,但我无法在文档或 Google 搜索结果中的任何地方找到它。

Visual Studio 2017 RC states 有一些 "Checkers for enforcing the C++ Core Guidelines"。由于 "Rule of five" 是最容易检查的规则之一,我相信它已经实施。

您可以为 GCC

使用编译器标志 -Weffc++

clang-tidy可以捕捉到这样的错误。鉴于此文件:

// badstyle.cpp
class Type {
  Type(const Type&) { }

  ~Type() { }
};

还有这个命令:

$ clang-tidy badstyle.cpp -checks=cppcoreguidelines-*

我的输出是:

badstyle.cpp:2:7: warning: class 'Type' defines a non-default destructor and a 
copy constructor but does not define a copy assignment operator, a move constructor
or a move assignment operator [cppcoreguidelines-special-member-functions]
class Type {
  ^