这是昨天的问题,我给了Visual Studio 2013无法处理的一些C 代码, @Galop1n友好地提供了解决方法,该解决方案非常适合这种情况。但是现在我走了一点点,视觉工作室再次给我带来了悲伤。
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时,我都会收到这两个消息:
test.cpp(21):错误C3546:'...':没有参数包可以展开
和
test.cpp(21):错误c3203:'valueType':无专业的别名模板不能用作模板参数'_ types'的模板参数,期望真实的类型
在每种情况下(实例化foo或实例化foo),两个消息都指向定义" x"的行。
更新:我的Microsoft Bug报告现在(在其附件中)此问题的所有基本变体。因此,这将是要注意修复的地方。
也许在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;
};