以下g++
行为是错误吗?
#include <utility>
#include <type_traits>
template< std::size_t ...i >
constexpr
bool f(int k, std::index_sequence< i... >)
{
int j = (std::size_t((void(i), 1)) + ...) * k;
return 0 < j;
}
static_assert(f(3, std::make_index_sequence< 3 >{}));
给出错误消息:
main.cpp:在函数中
constexpr bool f(int, std::index_sequence<i ...>)
:main.cpp:11:33:错误:
void i
阴影模板参数的声明int j = (std::size_t((void(i), 1)) + ...) * k; ^
main.cpp:7:11:注意:
i
此处声明的模板参数template< std::size_t ...i > ^~~
从void
到改变static_cast< void >
使错误停止。
k
从左边乘以也使错误停止。
std::size_t
这是为了避免这个 g++
错误。
我知道,该声明int (i),
相当于int i,
在几个上下文中,但不是在内置逗号运算符的 lhs 部分中。而且,它是一个void
变量声明。