【发布时间】:2010-05-11 13:12:12
【问题描述】:
我想用我的 Visual Studio 2005 编译器构建 olb3d 库,但由于模板错误而失败。
更具体地说,以下表达式似乎有问题:
void function(T u[Lattice<T>::d])
在该项目的网站上说,大概我的编译器无法处理如此复杂的模板表达式 - 应该使用 gcc 3.4.1。
我现在的问题是,是否有办法升级我的 vs c++ 编译器,以便它可以处理 gcc 3.4.1 级别的模板表达式?如果我获得更新版本的 Visual Studio 可能会有所帮助?
干杯 C.
【问题讨论】:
-
你能多贴一点代码吗?也许一个完整的 sn-p 应该编译但没有?
-
Lattice<T>::d部分似乎完全没有必要,因为数组衰减为指针,[]之间的值被忽略。 (也许你没有发布一个真实的例子。) -
发布更有意义的问题描述。从您到目前为止发布的内容来看,没有理由相信 任何 编译器都能够处理您的代码(实际上恰恰相反)。
-
@AndreyT:GCC 和 Comeau 似乎对它做得很好。也许它算作不可演绎的上下文,VC++也是对的?
-
@UncleBens 明确允许不可推导的上下文包含非推导参数和推导参数(标准以函数类型为例,但数组类型同样适用)。所以这个例子应该仍然可以编译。事实上,在演绎完成之前,
T u[...]已转换为T*,因此在演绎过程中甚至不会出现未演绎的上下文:)
标签: c++ visual-c++ templates visual-c++-2005