Bonjour à tous,
Je suis en train de porter des bibliothèques sous Linux (g++), que j'avais développé sous Windows (MSVC).
Un des problèmes récurrent que je rencontre avec g++, est qu'il vérifie le corps d'une fonction template avant son utilisation.
Par exemple (à la main juste pour expliciter le phénomène) :
Sous Windows, la vérification de la méthode template sera faire lors de son instanciation. Il sera donc possible de faire :
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 // a.h class A { public: static void SomeMethod(int i); }; // b.h template<int I> void ExecSomeMethod() { A::SomeMethod(I); } // c.h ExecSomeMethod<3>();
Tandis que g++ lui, lors de la première inclusion "b.h", il va protester comme quoi le symbole "A" n'existe pas..
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 #include "b.h" // erreur avec g++ #include "a.h" ExecSomeMethod<3>();
Dans mon cas, une bibliothèque essentiellement basée sur la méta programmation, c'est fort problématique.
Y aurait-il une option à passer à g++ pour ne pas qu'il vérifie le corps des méthodes template avant qu'il ne reçoive les appels avec les paramètres ?
En vous remerciant par avance,
A bientôt
Partager