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) :
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>();
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
 
#include "b.h" // erreur avec g++
#include "a.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..

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