【发布时间】:2013-11-01 04:27:10
【问题描述】:
我实际上遇到了以下问题:我希望能够使用-Wall -Wextra -Werror 进行构建,但是,以下代码会抱怨未使用的参数:
struct foo
{
template <typename... Args>
static void bar()
{ }
template <typename T, typename ... Args>
static void bar(T&& value, Args&& ... args)
{
#ifdef DEBUG
std::cout << value;
bar(std::forward<Args>(args)...);
#endif
}
};
第一个未使用的参数很容易修复:
#ifdef DEBUG
std::cout << value;
bar(std::forward<Args>(args)...);
#else // Shut the compiler up
(void) value;
#endif
我的问题是,我该如何处理剩下的 args?都没有
(void)(args...);
也没有
(void)(args)...;
会起作用,两者都抱怨参数包没有被扩展。
(这是在 GCC 4.7.3 下,如果这会对潜在的解决方案产生任何影响的话)。
【问题讨论】:
-
不要命名它们,编辑它只会在你不进行调试构建时抱怨
-
@aaronman 他们必须被命名,因为他们(有条件地,取决于
#DEBUG)被使用。 -
老实说这听起来很难看,但你也可以把名字放在 ifdef 中
标签: c++ c++11 variadic-templates