Bonjour,

je me trouve confronté à un problème que je n'attendais pas. Il se trouve qu'un typedef d'une base entre en conflit avec un paramètre template d'une dérivée.

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
class Base
{
  public:
    typedef int Type;
};
 
template<typename Type> 
class Derivee : public Base
{
  public: 
    // Fait référence à Base::Type, et non pas au paramètre template !!?
    Type m_a;
}; 
 
int main()
{
  Derivee<int*> d;
  int* p;
  d.m_a = p;
  return 0;
}
Dans mon cas, pas de soucis, je change le nom du parametre template, mais l'erreur est assez imprévisible et pas évidente à détecter (faut le savoir).

Comment faites-vous pour palier à ça ? Utilisez-vous des pre/suffixes explicites pour vos paramètres templates de façon à ne pas avoir de mauvaise surprises ?

Un changement de priorité est-il prévu dans la prochaine norme pour d'abord essayer de résoudre le nom des paramètres templates, puis chercher dans les typedefs des bases ?

merci