Oto minimalny przykład wywołując błąd kompilacji:Dlaczego to zastąpienie parametru szablonu variadic zawodzi? (opakowań przed stałe argumenty)
#include <utility>
void foo(int, double, int)
{}
template <class... Args>
void post_forwarder(void(*fun)(Args..., int), Args&&... aArgs)
{
fun(std::forward<Args>(aArgs)..., 5);
}
int main()
{
post_forwarder(foo, 6, 6.1); // Compilation error on instantiation
return 0;
}
Podejrzewam, że problem jest związany z faktem, że o zmiennej liczbie argumentów parametr szablonu jest rozszerzany w rodzaju funkcji przed wyznaczonym int parametr , ale jeśli tak jest, nie mogę znaleźć dobrego uzasadnienia.
Błąd zgłoszony przez Clang 3.6 jest:
error: no matching function for call to 'post_forwarder'
note: candidate template ignored: failed template argument deduction
Czy możesz zgłosić błąd? To było by pomocne. – lodo
Na marginesie, wydedukowałem 'Args && ... przekierowanie do wskaźnika funkcji oczekiwanego' Args ... 'nie jest dobrym planem. Tylko upewniając się, że o tym wiesz. – Yakk
@Yakk Muszę przyznać, że mogłem naprawdę użyć więcej szczegółów dotyczących punktu, który wychowujesz :) –