Pregunta

No tengo problemas para pasar la dirección de una especialización de plantilla de función a una función de plantilla regular:

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

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

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

Sin embargo, cuando trato de pasar las mismas especializaciones a una plantilla variádica:

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

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

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

Recibo los siguientes errores del compilador con GCC (probé 4.6.1 y 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:

¿Por qué recibo estos errores?

¿Fue útil?

Solución

Parece que podría ser un Error en GCC que posiblemente se solucione en GCC 4.6.2 (Digo posiblemente porque no es exactamente lo mismo, pero implica obtener la dirección de una función de plantilla variádica).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top