ein*_*ica 5 c++ templates instantiation compiler-warnings
我正在编写模板化函数*类似于以下内容:
template <typename T, bool v>
void foo(T t1) {
/* common code */
if (v) {
int i = bar();
/* ... */
return;
}
else {
/* ... */
}
/* more common code */
}
Run Code Online (Sandbox Code Playgroud)
当我编译它并foo实例化v设置为false时,编译器说:
warning: dynamic initialization in unreachable code
Run Code Online (Sandbox Code Playgroud)
现在,由于模板参数,代码无法访问; 这应该是完全可以接受的.如何避免或抑制此警告?我宁愿不完全压制这种警告.
笔记:
据我所知,就目前的结构而言,没有简单的方法可以真正修复它(我也遇到了同样的问题,NVCC 也是如此)。但是,您可以专门化模板,v=true并且仅在该专门化中的 - 语句内插入代码if(v)。
这绝不是最佳解决方案,因为它可能导致代码重复,但会修复警告。
如果您使用 GCC 作为主机编译器并且错误出现在主机代码中,您还可以尝试抑制警告,如下所示:
#pragma GCC diagnostic ignored "-Wunreachable-code"
Run Code Online (Sandbox Code Playgroud)
编辑:刚刚注意到这可能是错误的警告代码,因为它通常是关于死代码的。完整的警告列表可以在这里找到:http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
这个问题可能也令人感兴趣:How to disable compiler warnings with nvcc