问题描述
对于以下代码:
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 (将#修改为@)