考慮以下類:相依非類型模板參數
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