使用fold表达式初始化静态constexpr类数据成员不会编译

时间:2019-03-12 21:08:35

标签: c++ c++17 variadic-templates fold-expression

我对即使可以编译非常相似的代码也无法编译的特定代码感到困惑。

这将无法编译:

#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并没有帮助。

0 个答案:

没有答案