Как использовать прагму диагностики GCC с функциями шаблона C ++?

Я хотел бы использовать g ++ и -Werror , поэтому теперь я должен отключить предупреждения для сторонних библиотек, которые я не контролирую. Решение, предоставленное http://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html , работает очень хорошо, позволяя просто заключать включения сторонних заголовков в прагмы. К сожалению, это больше не работало для меня в определенных настройках, где используются шаблоны.Я создал следующий минимальный пример того, где этот подход не работал должным образом:

Исходный файл main.cpp

#pragma GCC diagnostic ignored "-Wunused-parameter"
#include "hdr.hpp"
#pragma GCC diagnostic error "-Wunused-parameter"
int main() {
    return mytemplatefunc(2) + mystandardfunc(3); // will print ONLY ONE warning
}

и заголовок hdr.hpp

template
int mytemplatefunc(T t) {
    return 42;
}
int mystandardfunc(int i) {
    return 53;
}

, скомпилированные с использованием Makefile

CPPFLAGS+=-Wunused-parameter -Werror
main: main.cpp

, приведут к следующей ошибке компилятора

g++  -Wunused-parameter -Werror   main.cpp   -o main
In file included from main.cpp:3:
hdr.hpp: In instantiation of ‘int mytemplatefunc(T) [with T = int]’:
main.cpp:29:   instantiated from here
hdr.hpp:2: error: unused parameter ‘t’
make: *** [main] Error 1
shell returned 2

] Обратите внимание, что явное создание экземпляра в main.cpp сразу после включения заголовка не сработало, и перенос вызова функции шаблона в main.cpp также не сработал. Вызывает недоумение то, что установка #pragma GCC диагностика игнорирует "-Wunused-parameter" перед основной функцией заставляет компилятор замолчать, а затем добавляет #pragma GCC диагностическую ошибку "-Wunused-parameter" в самом конце файла заставило компилятор снова выдать ошибку. Как решить эту загадку?

(Обратите внимание, есть десятки веток об этой прагме, но я никого не нашел что включало такую ​​настройку)

5
задан Julius 3 June 2011 в 13:01
поделиться