Passing Modello di funzione Specializzazioni a una funzione modello variadico
-
29-10-2019 - |
Domanda
Non ho problemi a passare l'indirizzo di una specializzazione del modello di funzione a una funzione modello regolare:
template <typename T>
void f(T) {}
template <typename A, typename B>
void foo(A, B) {}
int main()
{
foo(&f<int>, &f<float>);
}
Tuttavia, quando provo a passare le stesse specializzazioni a un modello variadico:
template <typename T>
void f(T) {}
template <typename... A>
void bar(A...) {}
int main()
{
bar(&f<int>, &f<float>);
}
Ottengo i seguenti errori del compilatore con GCC (ho provato 4.6.1 e 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:
Perché sto ottenendo questi errori?
Soluzione
Sembra che potrebbe essere un Bug in GCC che è probabilmente fissato in GCC 4.6.2 (Dico forse perché non è esattamente lo stesso, ma implica ottenere l'indirizzo di una funzione del modello variadico).
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow