Является ли следующее 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
объявление переменной.
Задача ещё не решена.
Других решений пока нет …