这是yesterday's question,我提供了一些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':unspecialized别名模板不能用作模板参数'_Types'的模板参数,期望是真实类型
在每种情况下(实例化foo或实例化Foo),两条消息都指向定义“x”的行。
更新:我的Microsoft bug report现在(在其附件中)有此问题的所有基本变体。所以这将是一个观察修复的地方。
答案 0 :(得分:0)
也许以下是关于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;
};