Зависимые нетиповые параметры шаблона

Рассмотрим следующий класс:

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?

Ответы на вопрос(1)

Ваш ответ на вопрос