Почему clang -Wunused-member-function не предупреждает о неиспользуемой функции-члене? - PullRequest
0 голосов
/ 21 января 2019

Я собираю очень простую программу, пытающуюся запустить выход из -Wunused-member-function.

test.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;
}

Выход из следующихКоманда

clang++ -std=c++17 -Wall -Wunused -Wunused-member-function \
        -Wunused-function -Wunneeded-member-function \
        test.cpp -o test

, к сожалению, не содержала ни одного предупреждения.Я ожидал, что компилятор предупредит о том, что foo_unused не используется.

Есть ли другое поведение, которое я здесь упускаю?В противном случае, почему Clang не будет жаловаться на неиспользованную функцию-член?

1 Ответ

0 голосов
/ 21 января 2019

Вы должны поместить класс в анонимное пространство имен, чтобы появилось предупреждение:

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

Вы можете видеть, что теперь у вас есть предупреждение: https://godbolt.org/z/15Buo-

Причина в том, чточто эта версия может активировать проверки clang и для открытых методов, поскольку вы прямо сказали, что этот класс не будет доступен в другом модуле перевода.

...