不知何故,我喜欢这些“最短”的程序显示(基本?)问题。当在VS2008中测试一些模板代码时,这个错误出现了(它也被VS2010和VS2012证实,见下文):STL的VS编译器错误C2752(“多个部分专业化匹配”)
c:\ program files(x86)\ microsoft visual studio 9.0 \ vc \ include \ xmemory(225):错误C2752: '的std :: _ Ptr_cat_helper < _T1,_T2>':一个以上的部分特化的模板参数列表
with [ _T1=const float (**), _T2=const float (**) ]
我可以归结问题有以下三个行相匹配:
#include <vector>
typedef float TPoint[3];
std::vector<TPoint const*> points; // error C2752
注意,以下是一切ok
#include <vector>
#include <list>
typedef float TPoint[3];
// these similar usages of TPoint are all ok:
std::vector<TPoint*> points; // no error
TPoint const* points1[2];
std::list<TPoint const*> points2;
我试图通过结构_Ptr_cat_helper提供额外的模板spezializations修复xutility - 没有运气。任何想法出了什么问题?或者如何解决而不会丢失const
?
还没有安装VS在我面前,但它与海湾合作委员会的工作。您可能在标准库中找到了一个错误。 –
升级VS目前是不可能的:我们依赖于来自其他团队的dll(使用MFC组件)......但是,如果上面的三行代码在VS2010上编译将会很好听 – coproc
对不起,它不能编译,这就是为什么我删除了该评论。 :尽管这个矢量的元素应该是什么,但这并不完全清楚。一个指向三个const Float元素的数组的指针? – Xeo