Выражение сгиба: парсер stackoverflow - PullRequest
0 голосов
/ 12 мая 2018

Привет, я хочу использовать оператор сгиба ,, но 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 и сохранить ясность выражения выражений.

1 Ответ

0 голосов
/ 12 мая 2018

Вот мой обходной путь (спасибо 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();
}

Не так хорошо, но работает.

...