为什么 clang -Wunused-member-function 不警告未使用的成员函数?

Ada*_*dam 5 c++ clang compiler-warnings

我正在编译一个非常基本的程序,试图触发-Wunused-member-function.

测试.cpp:

#include <iostream>

class A {
    public:
    void foo() { std::cout << "Called foo" << std::endl; }
    void foo_unused() { std::cout << "Unused foo" << std::endl; }
};

int main() {
    A obj;
    obj.foo();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

以下命令的输出

clang++ -std=c++17 -Wall -Wunused -Wunused-成员函数 \
        -Wunused-function -Wunneeded-member-function \
        test.cpp -o 测试

不幸的是,甚至没有包含任何警告。我希望编译器会警告foo_unused不使用。

我在这里缺少什么不同的行为吗?否则,clang为什么不抱怨未使用的成员函数呢?

Mat*_*her 4

您必须将该类放入匿名命名空间中才能显示警告:

namespace
{
class A {
    public:
    void foo() { std::cout << "Called foo" << std::endl; }
    void foo_unused() { std::cout << "Unused foo" << std::endl; }
};
}
Run Code Online (Sandbox Code Playgroud)

您可以看到现在有警告: https: //godbolt.org/z/15Buo-

原因是这个版本也可以激活对公共方法的 clang 检查,正如您明确指出的那样,此类在另一个翻译单元中将无法访问。