Si consideri la seguente classe:senza indicazione di tipo di modello Parametri
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> {/* ... */};
};
Lo schema di classe sopra compila e funziona come previsto quando testato su VC++ 2010 e Comeau C++. Tuttavia, quando Foo
è realizzato in un modello di per sé, le interruzioni di sopra frammento sotto VC++ 2010.
Ad esempio, il seguente frammento:
template<class> class Foo
{
// Same contents as the original non-templated Foo.
};
ottengono i seguenti 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
- Qualcuno può spiegare cosa sta succedendo qui in inglese?
- Come posso risolvere questo problema (ad esempio, mantenere le specializzazioni pseudo-esplicite interne in un modello
Foo
) su VC++ 2010?
Direi che i messaggi di errore sono falsi. FWIW, Comeau accetta il codice anche se 'Foo' è un modello. Ti suggerisco di provare in uno dei newsgroup di MS. I compilatori di MS erano soliti frequentare lì. – sbi