在gcc和Clang中没有关于模板函数中未使用参数的警告
No warning about unused parameter in template function with gcc but with Clang
我最近测试用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
下面是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;}
相关文章:
- (SFML)按下键时,播放器构造函数未使用正确的动画进行更新
- 为什么我会收到警告,指出函数已使用但未定义,以及已定义但未使用?
- G++ 编译器是否在未使用返回值的情况下将 constexpr 函数视为常规函数?
- 未使用的C++未优化的静态成员函数/变量
- 仅当一个参数中未使用 std::function 时,模板函数替换才有效
- isPalindrome不显示输出,isPalindrome函数未使用字符串输入作为字符串参数进行测试
- C++未使用的变量警告,即使我在函数结束时返回它
- 是否需要删除函数中未使用的新结构?
- 使用函数指针时,ESP 未在函数调用中正确保存
- 具有未使用的模板参数的函数模板
- 来自重载或模板化函数的额外未使用代码的影响?
- DLL 链接静态库 - 未使用函数中未解析的链接器符号
- 拥有这个未使用的函数 Init 有什么意义
- 试图使用int []作为打字模板,编译器未识别函数最小的原型中的参数
- 警告:用两个参数构造函数返回对象时,表达结果未使用
- GCC 警告未使用的静态函数,但不警告静态内联:是否有实际区别?
- 如何使用非平凡析构函数防止未使用的变量警告
- 为什么msvc编译器在显式调用析构函数时会发出未使用的变量
- 类型缺失的模板函数(运行时未使用)函数
- 禁止库标头中内联函数的 Xcode 未使用函数警告的正确方法