Parámetros de plantilla no tipo dependientes

Considere la siguiente clase:

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> {/* ... */};
};

El esquema de clase anterior compila y funciona como se esperaba cuando se probó en VC ++ 2010 y Comeau C ++. Sin embargo cuandoFoo se convierte en una plantilla, el fragmento anterior se rompe en VC ++ 2010.

Por ejemplo, el siguiente fragmento:

template<class> class Foo
{
  // Same contents as the original non-templated Foo.
};

Produce lo siguienteclase de error:

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
¿Alguien puede explicar lo que está sucediendo aquí en inglés simple?¿Cómo puedo solucionar esto (es decir, mantener las especializaciones pseudo-explícitas internas en una plantillaFoo) en VC ++ 2010?

Respuestas a la pregunta(1)

Su respuesta a la pregunta