以下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
这是为了避免this g++
的错误。
我知道,声明int (i),
在几个上下文中等同于int i,
,但不是内置逗号运算符的lhs部分。而且,它是void
变量声明。