使用可变参数模板的更多依赖类型
这遵循了昨天的问题,我提供了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