具有非类型参数包的可变参数模板类的静态成员的类外定义,取决于包含类的参数包

问题描述

对于以下代码

template<class... Parameter> struct Outer
{
    template<Parameter... Value> struct Inner
    {
        static bool Member;
    };
};

template<class... Parameter>
template<Parameter... Value>
bool Outer<Parameter...>::Inner<Value...>::Member = true;

int main()
{
    Outer<int>::Inner<0>::Member = false;
    return 0;
}

GCC 7.3.0报告:

error: expansion pattern 'Value' contains no argument packs
 bool Outer<Parameter...>::Inner<Value...>::Member = true;

和Visual Studio 16.7.2类似,大约是相同的Value参数包:

error C3546: '...': there are no parameter packs available to expand

如果同一代码中的Parameter不是参数包,或者Value不依赖于Parameter,则两个编译器都将成功。

为什么会发生这些错误?这种情况需要一些特殊的语法吗?

我知道自c++17起,可以通过使用inline关键字在类中定义成员来解决。但是,我希望代码尽可能与c++11兼容。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)