部分模板专门化在msvc++ 2010与默认值
partial template specialization in MSVC++2010 with defaults
下面的代码片段不能在msvc++ 2010上编译(在gcc, icc和sun CC下编译良好):
#include <iostream>
template< class T, unsigned D > struct Attribute
{
T attr[D];
};
template< class T, unsigned D, class A = Attribute< T, D > > struct Point
{
T coor[D];
A a;
};
template< class P1, class P2 > struct Pair;
template< class T1, class T2, unsigned D > struct Pair< Point< T1, D>, Point< T2, D > >
{
Point< T1, D> p1;
Point< T2, D> p2;
static const char * id()
{
return "specialized";
}
};
int main()
{
Pair< Point< float, 3>, Point< double, 3> > p;
std::cout << p.id() << std::endl;
return 0;
}
如果我从Point
声明中删除class A
的默认值,它编译得很好。任何关于如何在不改变Pair(即template< class P1, class P2 > struct Pair;
)的非专业声明的情况下解决此问题的建议都非常感谢。在实际代码中删除默认值也不是一个选项。
error C2079: 'p' uses undefined struct 'Pair<P1,P2>'
with
[
P1=Point<float,3>,
P2=Point<double,3>
]
Point的第三个模板形参应该出现在专门化中:
template<class T1, class T2, unsigned D>
struct Pair<Point<T1, D, Attribute<T1, D>>, Point<T2, D, Attribute<T2, D>>>
{ ... };
相关文章:
- MSVC 2010 编译应用程序和 MSVC 2019 编译应用程序之间的行为差异
- 是MSVC 2010中的错误还是我做错了什么
- 将MinGW64.o链接到MSVC 2010
- 使用 CMAKE 和 MSVC 2010 构建 GDCM 2.4.1 无法获取所有 DLL
- MSVC 2010项目范围的带参数宏
- 将mingw64 lib与MSVC 2010联系起来
- 在 MSVC 2010 中编译 64 位应用程序
- __declspec(dllimport)导致MSVC 2010上的编译器崩溃
- 在MSVC 2010上使用bjam构建Boost 1.50时出错
- MSVC 2010 and UTF8
- 如何使用 MSVC++ 2010 使 dll 更小
- 类崩溃编译器中的 MSVC 2010 模板化映射
- 似乎找不到 std::thread 在 msvc ++ 2010 Express
- msvc 2010应用程序0xc000007b错误
- MSVC++2010 Express链接器错误LNK2005
- 用于MSVC++2010编译器的调试器
- 无法解决 Qt/C++/NMake 的链接器错误 - 未使用选项 '/LIBPATH:' 指定参数 (Qt 5.2.0/MSVC 2010)
- BOOST_STATIC_ASSERT on MSVC++ 2010
- 部分模板专门化在msvc++ 2010与默认值
- c++ 11线程API: MSVC 2010有免费的实现吗?