展开模板参数VC ++ vs. MinGW-w64

时间:2016-12-10 00:02:09

标签: c++ c++11 templates visual-c++ mingw-w64

我创建的模板参数包需要转换为单个给定类型的包,然后将其用于各种目的。我使用MinGW-w64编译器(MSYS2)成功完成了这项工作。但是,相同的代码(见下文)无法使用Visual C ++ 2015进行编译。

template<int dimension, typename = std::make_index_sequence<dimension>>
class MyClass;

template <int dimension, std::size_t... Is>
class MyClass<dimension, std::index_sequence<Is...>>
{
    template<typename>
    using toInt = int;

    std::tuple<decltype(Is)...> val1;
    std::tuple<toInt<decltype(Is)>...> val2;
public:
    MyClass()
    {
        std::cout << std::tuple_size<decltype(val1)>::value << std::endl;
        std::cout << std::tuple_size<decltype(val2)>::value << std::endl;
    }
};

MyClass<3> obj;

// Should print two times '3'

具体而言,以下内容给出了编译错误:

std::tuple<toInt<decltype(Is)>...> val2;
" '...': there are no parameter packs available to expand "

整数序列未转换为整数但用作size_ts包的第一个元组确实可以编译并与两个编译器一起正常工作。

为什么会这样? VC ++是错误/不完整还是我编程不正确?

转换不一定限于整数,也不仅仅用于元组。这是一个简化的例子。完整的程序还可以使用MinGW正确编译和运行。

0 个答案:

没有答案