我创建的模板参数包需要转换为单个给定类型的包,然后将其用于各种目的。我使用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正确编译和运行。