C++ 具有可变模板的依赖类型

C++ 具有可变模板的依赖类型,c++,variadic,dependent-name,C++,Variadic,Dependent Name,你能看到这个函数声明有什么错误吗 template<typename... Containers> std::tuple<typename Containers::value_type...> foo(const Containers &...args); 模板 std::tuple foo(const容器和参数); 当我试着打电话给它时,就像这样: foo(std::list<int>(), std::vector<float>())

你能看到这个函数声明有什么错误吗

template<typename... Containers>
std::tuple<typename Containers::value_type...>
foo(const Containers &...args);
模板
std::tuple
foo(const容器和参数);
当我试着打电话给它时,就像这样:

foo(std::list<int>(), std::vector<float>());
foo(std::list(),std::vector());
MSVC2013显示
错误C2027:使用未定义的类型'std::tuple

我试着用“延迟返回”语法重写函数声明,结果没有什么不同


有什么方法可以实现这段代码的目的吗?

您获得了填写microsoft错误报告的权利……代码在clang和gcc上没有问题

VS2013和gcc 4.7的解决方案:

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

template<typename... Containers>
std::tuple<ValueType<Containers>...>
foo( const Containers &...args ) { return {}; }
模板
使用ValueType=typename T::value\u type;
模板
std::tuple
foo(const容器和…参数){return{};}

您是否忘记了
#可能包括
?在我的gcc版本中没有。你用哪一种?我在GCC 4.7.2中遇到了一个奇怪的错误,要求我提交一个bug报告。G+4.4.2,C++ 11确实不像老的C++那样稳定,编译器进化得很快,我知道。我以前在高级模板和4.7.2方面遇到过问题,但我的发行版的存储库中还没有4.8.x…您可以尝试我在答案中的解决方法,在VS2013Why typename元组中没有问题。