Я нашел 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 раза? (Чтобы получить больше внимания?)
Это кажется странным поведением, но я не могу представить себе более простой тест.
Смешно, на g ++ 4.9.2 печатается дважды. С clang он печатается только один раз. –
Кажется, что это специфический компилятор (возможно, неудивительно?). A (быстро) удаленный ответ также подчеркнул, что 'clang ++' печатает только один раз. Я использовал 'g ++ v5.2.0', чтобы получить 3 выхода - интересно узнать, что' v4.9.2' дает его дважды. Надеюсь, будет ответ, объясняющий, почему, хотя я не знаю, что это действительно поможет кому угодно (если только он не объяснит, как получить его только один раз) – chrisb2244
mingw 4.9.2 печатает сообщение дважды. Замените 'doNothing()' на 'auto f = doNothing; f(); 'и будет напечатано только один раз :) –