J'ai essayé cet exemple de "C++ Template - Le guide complet" par Nicolai M. JosuttisComportement étrange des arguments de modèle dans Visual C++?
#include <iostream>
using namespace std;
template< typename T >
class List {
};
typedef enum { RED, GREEN, BLUE } *color_ptr;
int main() {
struct Local {
int x;
};
List<Local> l; // error : local type in template argument
List<color_ptr> l1; // error : unamed type in template argument.
return 0;
}
Avec g ++ sous Ubuntu 9.04, je suis arrivé erreurs du compilateur. Cependant, ce morceau de code a été compilé avec succès dans Visual C++ 2008. Et comme je l'ai lu dans le livre: "Les arguments de type de modèle sont les" valeurs "spécifiées pour les paramètres de type de gabarit. 1. Les classes et énumérations locales (en d'autres termes, les types déclarés dans une définition de fonction) ne peuvent pas être impliquées dans les arguments de type template 2. Les types impliquant des types de classe sans nom ou des types d'énumération sans nom ne peuvent pas être des arguments de type template (les classes sans nom ou énumérations qui sont donnés un nom par une déclaration typedef sont OK.) donc, il y a une erreur dans Visual C++?
Est-ce le mode de débogage ou de libération? – jkeys
En cas de doute, essayez http://www.comeaucomputing.com/tryitout/. FWIW, il est d'accord avec g ++, donc ce serait un problème avec VC. – sbi
Le livre en question a été co-écrit par un développeur de comeau (EDG). –