Меня смущает конкретный фрагмент кода, который не будет компилироваться, даже если очень похожие фрагменты кода компилируются.
Это не скомпилируется:
#include <bitset>
template<std::size_t ...GROUPS>
class Foo
{
static constexpr std::size_t BIT_COUNT = (GROUPS + ...);
using Bits = std::bitset<BIT_COUNT>;
Bits bits;
};
class Bar : public Foo<6, 6, 6, 6>{};
с ошибкой просветления 1>c:\...\source.cpp(5): error C2059: syntax error: '...'
.
Это компилируется:
#include <bitset>
template<std::size_t ...GROUPS>
class Foo
{
using Bits = std::bitset<(GROUPS + ...)>;
Bits bits;
};
class Bar : public Foo<6, 6, 6, 6>{};
Это также компилирует:
#include <bitset>
template<auto... t>
constexpr auto static_sum()
{
return (t + ...);
}
template<std::size_t ...GROUPS>
class Foo
{
static constexpr std::size_t BIT_COUNT = static_sum<GROUPS...>();
using Bits = std::bitset<BIT_COUNT>;
Bits bits;
};
class Bar : public Foo<6, 6, 6, 6>{};
Я компилирую с MSVC ++ в Visual Studio 15.9.8.
Чего мне не хватает?
Редактировать: Я компилирую с флагом /std:c++17
. Попытка /std:latest
не помогла.