bug de specialisation template avec fichiers séparés
Bonjour,
J'ai le code suivant :
Fichier.h
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #include <iostream>
struct A
{
template < typename Unknown >
void eval ( Unknown x ) const;
};
template < typename Unknown >
void A :: eval ( Unknown x ) const
{
std::cout << "eval x = " << x () << std::endl;
}
template <>
void A :: eval< int > ( int x ) const
{
std::cout << "specialisation eval x = " << x << std::endl;
} |
Fichier.cpp
Code:
1 2 3 4 5 6 7 8 9
| #include "Fichier.h"
int main()
{
A a;
a.eval(2);
return 0;
} |
Lorsque je compile, j'obtiens le message suivant du compilateur :
multiple definition of `void A::eval<int>(int) const'
Cependant si je met l'intégralité de Fichier.h dans Fichier.cpp, le code compile parfaitement et se comporte parfaitement (à savoir appel du membre spécialisé).
Comment faire pour résoudre le problème en gardant les 2 fichiers?