Bonjour,

Les explications sont plus bas, le code qui pose problème est là
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
31
32
33
34
35
36
#include <iostream>
 
enum enum_type
  {
    val_zero = 0,
    val_one,
    val_two,
    val_twenty_four = 24
  };
 
/*------------------------------------------------------------*/
class workaround
{
public:
  template<enum_type Val>
  unsigned int get() { return Val; }
}; // class workaround
 
/*------------------------------------------------------------*/
template<class Method>
class A
{
public:
  void f()
  {
    Method m;
    std::cout << m.get<val_zero>() << std::endl; /* ligne 27 */
  }
}; // class A
 
int main()
{
  A<workaround> a;
 
  a.f();
}
J'essaie d'appeler, dans la classe A, une méthode de son paramètre template. Cette méthode a aussi un paramètre template. Alors je compile tout ça, et là mon compilateur m'insulte (g++ 4.0.3) :

test_virt_temp.cpp: In member function «void A<Method>::f()»:
test_virt_temp.cpp:27: erreur: expected primary-expression before «)» token
test_virt_temp.cpp: In member function «void A<Method>::f() [with Method = workaround]»:
test_virt_temp.cpp:64: instantiated from here
test_virt_temp.cpp:27: erreur: no match for «operator<<» in «std::cout << m.workaround::get»
J'imagine que j'ai un problème de syntaxe, mais je n'arrive pas à mettre la main dessus. Est-ce plus clair pour vous ?

Merci