fold表达式中的void变量阴影模板参数的声明

时间:2016-11-16 16:51:59

标签: c++ g++ operators c++17 fold-expression

以下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 >
          ^~~

Live example.

void更改为static_cast< void >会导致错误停止。

从左侧乘以k也会导致错误停止。

std::size_t这是为了避免this g++的错误。

我知道,声明int (i),在几个上下文中等同于int i,,但不是内置逗号运算符的lhs部分。而且,它是void变量声明。

0 个答案:

没有答案