4

非常によく似たコードがコンパイルされるにもかかわらず、特定のコードがコンパイルされないことに混乱しています。

これはコンパイルされません:

#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>{};

Visual Studio 15.9.8 で MSVC++ を使用してコンパイルしています。私は何が欠けていますか?

編集:/std:c++17フラグを使用してコンパイルしています。試してみ/std:latestても役に立ちませんでした。

4

1 に答える 1