Bonjour,
Je rencontre un problème de compilation assez particulié avec une classe template, incluant une fonction template spécialisée.
Le code compile sans problème sous Visual Studio Express 2005 (VC8.0) avec les options "sans optimisation" (/Od) et "sans extension du langage" (/Za).
Le même code ne compile pas et produit des erreurs avec G++ (G++ 4.0 et MinGW/G++ 3.2)
Voici une classe qui reproduit le même contexte et le même problème.
Et les erreurs de g++ :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 template <class T, class U> class Classe { T _t; U _u; Classe & operator = (const Classe &); public: Classe(const T & t, const U & u) : _t(t), _u(u) {} Classe(const Classe & c) : _t(c._t), _u(c._u) {} ~Classe() {} template <int n> double fact(void) { return double(n) * fact<n-1>(); } template <> double fact<0>(void) { U u = _u; T t = _t; return 1.L; } }; int main(void) { Classe <int, char> cl(14, '.'); double d = cl.fact<6>(); return 0; }
tpl.cpp:16: error: invalid explicit specialization before '>' token
tpl.cpp:16: error: explicit specialization in non-namespace scope `class Classe<T, U>'
tpl.cpp:16: error: enclosing class templates are not explicitly specialized
tpl.cpp:18: error: invalid member function declaration
Je cherche à savoir si :
- mon code n'est pas conforme au standard, et VC++ en accepte plus que prévu
- ou g++ n'est pas suffisament conforme pour accepter ma classe ?
Partager