3

以下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变量声明。

4

0 回答 0