[[Maybe_unused]] в переменной-члене, GCC предупреждает (неправильно?), что атрибут игнорируется - PullRequest
0 голосов
/ 01 июня 2018

В следующем примере :

struct Foo {
    [[maybe_unused]] int member = 1;
    void bar() {
        [[maybe_unused]] int local = 0;
    }
};

int main(int argc, char* argv[]) {
    Foo f{};
    f.bar();
    return 0;
}

GCC выдает предупреждение, когда Clang и MSVC не делают:

warning: 'maybe_unused' attribute ignored [-Wattributes]
     [[maybe_unused]] int member = 1;

Насколько я могу судить,это должно быть законно (и не должно игнорироваться компилятором).Согласно стандарту :

10.6.7 Возможно, неиспользуемый атрибут [dcl.attr.unused]
...
2. Атрибут может применяться кобъявление класса, typedef-имени, переменной, нестатического члена данных , функции, перечисления или перечислителя.
...

Ненавижу качаться вокруг молотка "ошибка компилятора", но я не уверен, что еще это может быть в этом случае.

У кого-нибудь есть понимание?

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

GCC не будет предупреждать вас о неиспользованных переменных-членах, поэтому атрибут не имеет смысла, поэтому он предупреждает вас о его игнорировании.Это всего лишь предупреждение, ваш код по-прежнему допустим.

0 голосов
/ 01 июня 2018

Любой атрибут может быть «проигнорирован компилятором» по любой причине, кроме случаев, когда стандарт говорит иначе (например, использование атрибута в месте, где он явно запрещен).

GCC не говоритвы не можете положить его там;он говорит, что его размещение ничего не даст, потому что они, вероятно, не предупреждают о возможно неиспользованных переменных-членах.

...