При компиляции с -Wshadow = global в GCC 7.3 и 8.2 компилятор предупреждает, что в следующем фрагменте кода тени.
constexpr int A = 0;
class Bar {
public:
enum Bars {
A = 0
};
};
enum class Foo {
A = 0 // warns this entry shadows global declaration of A
};
int main() {
return 0;
}
<source>:11:9: warning: declaration of 'A' shadows a global declaration [-Wshadow]
A = 0
^
<source>:1:15: note: shadowed declaration is here
constexpr int A = 0;
^
Поскольку для классов enum требуется указание имени класса enum при ссылке, я понимаю, что все три объявления A
являются отдельными: ::A
, ::Bar::A
и ::Foo::A
.
Clang 7 не выдает предупреждение с -Wshadow.
Это правильное теневое предупреждение, и если да, то почему?