具有可变参数模板的依赖类型

时间:2014-02-06 15:33:51

标签: c++ variadic dependent-name

你能看到这个函数声明有什么问题吗?

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>

我尝试使用“延迟返回”语法重写函数声明,但没有区别。

有什么办法可以实现这段代码的功能吗?

1 个答案:

答案 0 :(得分: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 {}; }