Передача специализаций шаблона функции в функцию шаблона - PullRequest
7 голосов
/ 13 сентября 2011

У меня нет проблем с передачей адреса специализации шаблона функции в обычную шаблонную функцию:

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

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

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

Однако, когда я пытаюсь передать те же специализации в шаблон с переменным числом аргументов:

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

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

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

Я получаю следующие ошибки компилятора с GCC (я пробовал 4.6.1 и 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:

Почему я получаю эти ошибки?

1 Ответ

5 голосов
/ 13 сентября 2011

Похоже, что это может быть ошибка в GCC, которая, возможно, исправлена ​​в GCC 4.6.2 (я говорю, возможно, потому что это не совсем то же самое, но включает в себя получение адреса функции шаблона variadic) .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...