考虑以下类:相依非类型模板参数
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和科莫C++测试按预期编译和功能。然而,当Foo
被制成模板本身,下VC++ 2010
例如,下面的代码段上面的片段游:
template<class> class Foo
{
// Same contents as the original non-templated Foo.
};
产生以下error class:
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
- 有人可以用简单的英语解释这里发生了什么吗?
- 如何在VC++ 2010上修复这个问题(即,在模板
Foo
中保留内部伪显式专业化)?
我想说错误消息是假的。 FWIW,即使'Foo'是模板,Comeau也接受代码。我建议你尝试在MS的新闻组之一。 MS编译器人员曾经在那里闲逛。 – sbi 2010-07-18 18:20:48