次のクラスについて考えてみます。
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およびComeauC++でテストしたときに、期待どおりにコンパイルおよび機能します。ただし、を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でこれを修正するにはどうすればよいですか(つまり、内部の疑似明示的な特殊化をテンプレートに保持します)?