j'ai une certaine difficulté à déclarer en avant une fonction qui utilise boost::enable_if
: la pièce de code suivante me donne une erreur de compilation:déclarant avant une fonction qui utilise enable_if: appel ambigu
// Declaration
template <typename T>
void foo(T t);
// Definition
template <typename T>
typename boost::enable_if<boost::is_same<T, int> >::type foo(T t)
{
}
int main()
{
foo(12);
return 0;
}
Lors de la compilation, je reçois un " appel ambigu à foo "erreur. Selon la définition de enable_if
, le type 'typedef' correspond à void
lorsque la condition est vraie, donc autant que je peux voir, les deux signatures de foo
correspondent. Pourquoi le compilateur pense-t-il qu'ils sont différents, et existe-t-il un moyen correct d'envoyer la déclaration foo
(de préférence sans répéter la partie enable_if
)?
Le match est le problème, le compilateur ne peut pas décider que vous souhaitez utiliser modèle que. –