2014-02-06 61 views
3

您能看到这个函数声明有什么问题吗?可变类型与可变参数模板

template<typename... Containers> 
std::tuple<typename Containers::value_type...> 
foo(const Containers &...args); 

当我尝试调用它,就像这样:

foo(std::list<int>(), std::vector<float>()); 

MSVC2013说error C2027: use of undefined type 'std::tuple<Containers::value_type>

我试着用“迟到”语法重写函数声明,它没有任何区别。

有什么办法可以实现这段代码试图做什么?

+5

你忘了'#包括'也许? – chris

+0

不,我明白了。 – slyqualin

回答

4

您赢得填写微软错误报告的权利connect ...代码在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 {}; } 
+0

不在我的gcc版本上。你在用哪个?我在gcc 4.7.2上发现了一个奇怪的错误,要求我提交一个错误报告。 – JorenHeit

+0

g ++ 4.8.2,C++ 11实际上不像老版本那样稳定C++和编译器快速发展http://coliru.stacked-crooked.com/a/e554d0c9b837df67 – galop1n

+0

是的,我知道。我以前有过高级模板和4.7.2的问题,但是我的发行版在其存储库中没有4.8.x ... – JorenHeit