考虑以下类:
class Foo
{
enum Flags {Bar, Baz, Bax};
template<Flags, class = void> struct Internal;
template<class unused> struct Internal<Bar, unused> {/* ... */};
template<class unused> struct Internal<Baz, unused> {/* ... */};
template<class unused> struct Internal<Bax, unused> {/* ... */};
};
在 VC++ 2010 和 Comeau C++ 上测试时,上面的类大纲按预期编译和运行。但是,当Foo
被制作成模板本身时,上面的代码片段在 VC++ 2010 下会中断。
例如,以下代码段:
template<class> class Foo
{
// Same contents as the original non-templated Foo.
};
产生以下错误类:
C2754: 'Foo<<unnamed-symbol>>::Internal<Bar,unused>' : a partial specialization cannot have a dependent non-type template parameter
C2754: 'Foo<<unnamed-symbol>>::Internal<Baz,unused>' : a partial specialization cannot have a dependent non-type template parameter
C2754: 'Foo<<unnamed-symbol>>::Internal<Bax,unused>' : a partial specialization cannot have a dependent non-type template parameter
- 有人可以用简单的英语解释这里发生了什么吗?
- 如何
Foo
在 VC++ 2010 上解决这个问题(即,在模板中保留内部伪显式专业化)?