折叠表达式:解析器stackoverflow

时间:2018-05-11 21:32:06

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

您好我想使用折叠式表达式,运算符,但MSVC一直让我烦恼C1026->程序很复杂。我把问题分解为最小的例子:

#include <utility>
#include <iostream>
template<size_t idx>
void foo()
{
    //do some stuff
}
template<typename Ts>
struct ApplySomeFun;

template<size_t... Ts >
struct ApplySomeFun<std::index_sequence<Ts...>>
{

    static void execute() 
    {
        (void(foo<Ts>()), ...);// C1026
    }


};

int main()
{   
    ApplySomeFun<std::make_index_sequence<1024>>::execute();
} 

这适用于gcc但不适用于msvc。所以我的问题是如何在msvc中构建它并保持foldexpression清晰。

1 个答案:

答案 0 :(得分:0)

这是我的workarround(感谢max66提示)。

template<size_t idx>
void foo()
{
    std::cout << idx << std::endl;
}
template<typename Ts>
struct ApplySomeFun;

template<size_t... Ts >
struct ApplySomeFun<std::index_sequence<Ts...>>
{

    static void execute()
    {
        int unused[] = { 0, ((void)foo<Ts>(), 0)... };//Expander trick
        (void)unused; // blocks warnings
    }


};

int main()
{
    ApplySomeFun<std::make_index_sequence<1024>>::execute();
}

不太好但是有效。