je le code suivant dans le fichier d'en-tête:modèle syntaxe <> requis par Solaris CC, mais interdite par MSVC et GCC
template<typename A, typename B> class TemplateTest;
template<>
class TemplateTest<int, double>
{
public:
float operator() (float a);
};
La définition dans le fichier cpp:
template<> // this is problematic line
float TemplateTest<int, double>::operator()(float a)
{
float b;
b = a + 5;
return b;
}
avec le "template <>" dans la définition, MSVC renvoie l'erreur C2910 car il interprète operator() comme une méthode template au lieu d'une méthode d'une classe template. GCC se comporte de manière similaire. Mais Solaris CC requiert le "template <>" (sinon il émet une erreur "" template <> "la syntaxe est requise pour la spécialisation explicite d'un membre de ..."
Donc ma question est de savoir laquelle est correcte et comment rendre le code compile sur toutes ces plates-formes
assurez-vous de lire ceci: https://stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in-the-header-file – bolov
@bolov Ce conseil ne s'applique qu'aux définitions avoir au moins un paramètre de modèle. Cette définition spécialisée 'operator()' n'en a aucune. – aschepler