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