这跟在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或类模板富,我得到这两个消息:
Test.cpp的(21):错误C3546: '...':有可用来扩大
和
Test.cpp的(21)无参数包:错误C3203: '值类型':unspecia lized别名模板不能被用作模板参数“_types”模板参数,预期一个实数型
在每种情况下(实例FOO或实例化的Foo),这两个消息指向限定“X线”。
更新:我的Microsoft bug report现在有(在其附件中)此问题的所有基本变体。所以这将是一个观看修复的地方。
人,你只是在吸地,再一次,*双向*工作在我的Mac铛完美无瑕(铛-500.2.79 )(基于LLVM 3.3svn)。啊。我没有VS2013启动并运行,因此请保存一些输入内容并告诉我,VS2013是否支持模板参数?如果是这样,可能会有另一种解决方法(至少从我这里,其他人可能也有其他想法)。编辑:从头开始,不会如何工作。呸。 – WhozCraig
也许可以使用经典的元函数而不是类型别名。 'template struct value_type {typedef typename T :: value_type type; };' –
pmr
@pmr,您可以在模板类中使用typedef来定义“type”,这与容器定义“value_type”的方式相同;所以应用程序代码访问你的“类型”的问题基本上是同样的问题,对吧? – slyqualin