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 это также должно быть в соответствии с документацией , но это не так.