Question

Je n'ai aucun problème à passer l'adresse d'une structure de fonction Spécialisation à une fonction de modèle régulière:

template <typename T>
void f(T) {}

template <typename A, typename B>
void foo(A, B) {}

int main()
{
    foo(&f<int>, &f<float>);
}

Cependant, lorsque j'essaie de passer les mêmes spécialisations à un modèle variadique:

template <typename T>
void f(T) {}

template <typename... A>
void bar(A...) {}

int main()
{
    bar(&f<int>, &f<float>);
}

Je reçois les erreurs de compilateur suivantes avec GCC (j'ai essayé 4.6.1 et 4.7.0):

test.cpp: In function 'int main()':
test.cpp:9:27: error: no matching function for call to 'bar(<unresolved overloaded function type>, <unresolved overloaded function type>)'
test.cpp:9:27: note: candidate is:
test.cpp:5:6: note: template<class ... A> void bar(A ...)
test.cpp:5:6: note:   template argument deduction/substitution failed:

Pourquoi suis-je ces erreurs?

Était-ce utile?

La solution

On dirait que cela pourrait être un bogue dans GCC qui est éventuellement fixé dans GCC 4.6.2 (je dis éventuellement parce que ce n'est pas exactement la même chose, mais implique d'obtenir l'adresse d'une fonction de modèle variadique).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top