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.
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).
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; }
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![]()
Partager