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

No warning about unused parameter in template function with gcc but with Clang

本文关键字:未使用 函数 参数 警告 于模板 gcc Clang      更新时间:2023-10-16

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

下面是一个小例子:

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

用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;}

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

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

是否有一种方法来执行类似的行为?我希望gcc也生成未使用的参数警告。

编译器:

    Clang: Version 3.3 (branches/release_33 183898)
  • Gcc: Version 4.8.1 20130909

谢谢@ dieterl cking,你的评论对我帮助很大。Gcc似乎只有在模板函数实例化时才会生成未使用的参数警告。对于这种警告,哪个决定似乎是有效的,即使我更喜欢这样叮当声的警告。

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

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

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;}