Флаг компилятора Clang `-Wshadow-field-in-constructor` не включает предупреждение - PullRequest
0 голосов
/ 15 января 2020

Edit: Nevermind, это известная ошибка .

В следующем коде (из этот вопрос ) параметр конструктора затеняет поле структуры.

#include <iostream>

struct A
{
    A(int n) { std::cout << n; }
    int n{2};
};

int main()
{
    A a{1};
}

Компиляция с помощью clang (clang версия 9.0.1, цель: x86_64-p c - linux -gnu) в командной строке с -Weverything выдает, как и ожидалось, следующее предупреждение :

test.cpp:5:11: warning: constructor parameter 'n' shadows the field 'n' of 'A' [-Wshadow-field-in-constructor]
    A(int n) { std::cout << n; }
          ^
test.cpp:6:9: note: previous declaration is here
    int n{2};
        ^

(и куча предупреждений о совместимости C ++ 98). Но компиляция с помощью -Wshadow-field-in-constructor не дает этого предупреждения, только с -Wshadow-all мы получаем его снова. (см. также godbolt ) Это ошибка в Clang?

PS: На g cc это предупреждение активируется -Wshadow. В clang это также должно быть в соответствии с документацией , но это не так.

...