Bonjour

Dans le livre d'Abrahams, il est écrit:

The C++ standard requires the template keyword when we use a dependent name that refers to a member template.
(cf p 49)

Il donne en fait un exemple:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
template<class F,class X>
struct twice
{
  typedef typename F::template apply<X>::type once;
...
};
En fait, j'aimerais provoquer une erreur en omettant le mot clé template. Comme ici par ex.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
template<class F,class X>
struct twice
{
  typedef typename F::apply<X>::type once;
...
};
Le pb est que ca fonctionne parfaitement. pas d'erreur de compile.

Ensuite, dans l'annexe page 319.
"The template keyword is required before dependent names accessing member template via ., -> or :: qualification. in the following example, convert and base depend on T".

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
template<class T> void f(T& x, T*y)
{
  int n=x.template convert<int>();
  int m=y->template convert<int>();
}
Mais si on fait:


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
template<class T> void f(T& x, T*y)
{
  int n=x.template convert<int>();
  int m=y->convert<int>();
}
Ca compile parfaitement.

Pouvez vous me donner un exemple où il est nécessaire de mettre template, devant le dependent name sinon ça plante.

merci