19 votes

Comment corriger l'erreur "expression principale attendue avant" dans le code de modèle C++ ?

Voici un autre problème de compilation entre VC9 et GCC 4.2. Le code suivant compile correctement avec VC9 (Microsoft Visual C++ 2008 SP1) mais pas avec GCC 4.2 sur Mac :

struct C
{
    template< typename T >
    static bool big() { return sizeof( T ) > 8; }
};

template< typename X >
struct UseBig
{
    static bool test()
    {
        return X::big< char >(); // ERREUR: expression primaire attendue
    }                            // avant 'char'
};

int main()
{
    C::big< char >();
    UseBig< C >::test();
    return 0;
}

Des idées sur comment je peux corriger cela ?

43voto

Georg Fritzsche Points 59185

Cela devrait être

return X::modèle grand();

Les noms dépendants des modèles sont considérés comme étant non être des types à moins que vous spécifiez qu'ils le sont via typename et sont supposés ne pas être des modèles sauf s'ils sont spécifiés via template.

2voto

f4. Points 2329

La réponse était ici avec un petit extrait de la norme C++'03

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X