Visual Studio的最新预览版声称支持折叠表达式。但是,以下代码无法编译:
template<class T> struct L
{
void g() { }
};
template<class... TT> struct B
{
std::tuple<L<TT>...> ss;
void f();
//void f()
//{
// (std::get<L<TT>>(ss).g(), ...);
//}
};
template<class... TT> void B<TT...>::f()
{
(std::get<L<TT>>(ss).g(), ...);
}
int main()
{
B<int, double> b;
b.f();
}
错误是:
22 : <source>(22): error C3520: 'TT': parameter pack must be expanded in this context
21 : <source>(21): note: while compiling class template member function 'void B<int,double>::f(void)'
28 : <source>(28): note: see reference to function template instantiation 'void B<int,double>::f(void)' being compiled
27 : <source>(27): note: see reference to class template instantiation 'B<int,double>' being compiled
22 : <source>(22): error C2228: left of '.g' must have class/struct/union
22 : <source>(22): error C2059: syntax error: '...'
但是,如果我在结构中移动f()
的定义,一切都很好。我不会遇到海湾合作委员会这样的问题。
这是MSVC折叠表达式实现中的错误吗?