在MSVC 15.5 Preview 2中折叠表达式

时间:2017-11-03 12:07:10

标签: c++ visual-c++ c++17

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折叠表达式实现中的错误吗?

0 个答案:

没有答案