如何解决具有非类型参数包的可变参数模板类的静态成员的类外定义,取决于包含类的参数包
对于以下代码:
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 举报,一经查实,本站将立刻删除。