2015-10-14 2 views
3

Я нашел this question/answer, который описывает использование [[deprecated]] как функции C++14, чтобы дать указание компилятору предупредить об использовании устаревших функций.При использовании [[устарело]] предупреждение дается 3 раза

Я попытался использовать это в простой функции внутри проекта - предупреждение было выпущено 3 раза. Первоначально я думал, что это может быть несколько экземпляров шаблонов, поэтому я протестировал простую программу.

[[deprecated]] void doNothing() {} 

int main(){ 
    doNothing(); 
} 

g++ -std=c++14 deprecatedTest.cpp выходы

deprecatedTest.cpp: In function 'int main()': 
deprecatedTest.cpp:4:5: warning: 'void doNothing()' is deprecated [-Wdeprecated-declarations] 
    doNothing(); 
    ^
deprecatedTest.cpp:1:21: note: declared here 
[[deprecated]] void doNothing() {} 
        ^
deprecatedTest.cpp:4:5: warning: 'void doNothing()' is deprecated [-Wdeprecated-declarations] 
    doNothing(); 
    ^
deprecatedTest.cpp:1:21: note: declared here 
[[deprecated]] void doNothing() {} 
        ^
deprecatedTest.cpp:4:15: warning: 'void doNothing()' is deprecated [-Wdeprecated-declarations] 
    doNothing(); 
      ^
deprecatedTest.cpp:1:21: note: declared here 
[[deprecated]] void doNothing() {} 

должен ли предупреждение для печати 3 раза? (Чтобы получить больше внимания?)

Это кажется странным поведением, но я не могу представить себе более простой тест.

+1

Смешно, на g ++ 4.9.2 печатается дважды. С clang он печатается только один раз. –

+0

Кажется, что это специфический компилятор (возможно, неудивительно?). A (быстро) удаленный ответ также подчеркнул, что 'clang ++' печатает только один раз. Я использовал 'g ++ v5.2.0', чтобы получить 3 выхода - интересно узнать, что' v4.9.2' дает его дважды. Надеюсь, будет ответ, объясняющий, почему, хотя я не знаю, что это действительно поможет кому угодно (если только он не объяснит, как получить его только один раз) – chrisb2244

+1

mingw 4.9.2 печатает сообщение дважды. Замените 'doNothing()' на 'auto f = doNothing; f(); 'и будет напечатано только один раз :) –

ответ

2

Это очевидный вопрос о качестве выполнения и вряд ли будет преднамеренным.

Просто поднимите его на GCC Bugzilla, если его еще нет.

OP has raised this on Bugzilla, as suggested. ☺

+0

Добавлена ​​ошибка после нескольких комментариев, указывающих, что это зависит от версии. Существует уже предположительно связанная/подобная/ту же ошибку для синтаксиса 'attribute' для устаревших – chrisb2244

+0

@ chrisb2244: Я хочу связать нас с ним? –

+0

[Отчет об ошибке] (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67960) – chrisb2244

Смежные вопросы