使用可变参数模板的更多依赖类型

这遵循了昨天的问题,我提供了Visual Studio 2013无法处理的一些C ++代码,并且@ galop1n提供了一种解决方法,该解决方案适用于这种情况。 但是现在我已经走得更远了,Visual Studio再次让我感到悲伤。

template <typename T>
using ValueType = typename T::value_type;

template<typename... Containers>
void
foo(const Containers &...args) {
    std::tuple<ValueType<Containers>...> x;
}

template<typename... Containers>
struct Foo {
    std::tuple<ValueType<Containers>...> x;
};

每当我尝试实例化函数模板foo或类模板Foo时,我都会得到以下两条消息:

Test.cpp(21):错误C3546:'...':没有可用于扩展的参数包

Test.cpp(21):错误C3203:'ValueType':未指定别名模板不能用作模板参数'_Types'的模板参数,预期实际类型

在每种情况下(实例化foo或实例化Foo),两个消息均指向定义“x”的行。

更新:我的微软错误报告现在有(在其附件中)这个问题的所有基本变种。 所以这将是观看修复的地方。


也许下面的工作VS2013(更详细:/):

template<typename... Containers>
void foo(const Containers &...args) {
    std::tuple<typename std::decay<decltype(*args.begin())>::type...> x;
}

template<typename... Containers>
struct Foo {
    std::tuple<typename std::decay<decltype(*std::declval<Containers>().begin())>::type...> x;
};
链接地址: http://www.djcxy.com/p/66535.html

上一篇: more dependent types with variadic templates

下一篇: c++ template class member function specialization