Parametre template et typedef d'une base
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:
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 :)