объявление параметра шаблона теней void переменной в выражении сгиба

Является ли следующее 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: note: параметр шаблона i объявлено здесь

template< std::size_t ...i >
^~~

Живой пример.

Изменение от void в static_cast< void > делает ошибку, чтобы прекратить.

Умножение на k с левой стороны также делает ошибку, чтобы прекратить.

std::size_t здесь, чтобы избежать этот g++ошибка

Я знаю, что декларация int (i), эквивалентно int i, в нескольких контекстах, но не в части lhs встроенного оператора запятой. Более того, это void объявление переменной.

3

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]