没有关于gcc但带有Clang的模板函数中未使用参数的警告

tgm*_*ath 3 c++ gcc templates clang

我最近测试了用clang而不是gcc构建代码。它失败,因为由于模板函数中未使用的参数,我使用-Werror。使用gcc不会发生这种情况。

这是一个小例子:

template <typename REAL> int f(int a){return 42;}

int g(int a){return 42;}
Run Code Online (Sandbox Code Playgroud)

用clang编译得到我想要的结果:

$clang -c UnusedParam.cpp  -Wunused-parameter
>UnusedParam.cpp:1:36: warning: unused parameter 'a' [-Wunused-parameter]
> template <typename REAL> int f(int a){return 42;}
>                                   ^
>UnusedParam.cpp:3:11: warning: unused parameter 'a' [-Wunused-parameter]
> int g(int a){return 42;}
Run Code Online (Sandbox Code Playgroud)

Gcc只会报告第二个函数中未使用的参数。

$gcc -c UnusedParam.cpp  -Wunused-parameter
>UnusedParam.cpp:3:5: warning: unused parameter ‘a’ [-Wunused-parameter]
> int g(int a){return 42;}
Run Code Online (Sandbox Code Playgroud)

有没有办法执行类似的行为?我也希望gcc生成未使用的参数警告。

编译器:

  • 叮当声:3.3版(分支/ release_33 183898)
  • Gcc:版本4.8.1 20130909

tgm*_*ath 5

感谢@DieterLücking,您的评论对我有很大帮助。Gcc似乎仅在实例化模板函数时才会生成未使用的参数警告。对于这种警告,这似乎是一个有效的决定,即使如此,我还是更喜欢Clang的警告。

这是Gcc抱怨未使用的参数的版本:

template <typename REAL> int f(int a){return 42;}

int h(){return f<int>(3);}
Run Code Online (Sandbox Code Playgroud)

Gcc警告:

$ gcc -c UnusedParam.cpp  -Wunused-parameter
>UnusedParam.cpp: In instantiation of ‘int f(int) [with REAL = int]’:
>UnusedParam.cpp:4:24:   required from here
>UnusedParam.cpp:1:30: warning: unused parameter ‘a’ [-Wunused-parameter]
 template <typename REAL> int f(int a){return 42;}
Run Code Online (Sandbox Code Playgroud)