Сбой вывода / замены аргумента шаблона при использовании std :: function и std :: bind

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

#include 
#include 
using std::function;
using std::bind;
using std::shared_ptr;

class Test {
public:
     template 
     void setCallback(function cb); 
};

template 
void Test::setCallback(function cb)
{
    // do nothing
}

class TestA {
public:
    void testa(int a, int b) {   }
};


int main()
{
    TestA testA;
    Test test;
    test.setCallback(bind(&TestA::testa, &testA, std::placeholders::_1, std::placeholders::_2));
    return 0;
}

И прийти со следующей ошибкой компиляции:

testtemplate.cpp: в функции ‘int main () ’:

testtemplate.cpp: 29: 92: ошибка: не соответствует функция для вызова ‘Test :: setCallback (std :: _ Bind_helper) (int, int), TestA, const std :: _ Placeholder <1> &, const std :: _ Заполнитель <2> &>::тип)'

testtemplate.cpp: 29: 92: примечание: кандидат: testtemplate.cpp: 10: 7: примечание: шаблон void Test :: setCallback (std :: function)

testtemplate.cpp: 10: 7: примечание: не удалось вывести / заменить аргумент шаблона:

testtemplate.cpp: 29: 92: примечание: ‘std :: _ Bind (TestA *, std :: _ Placeholder <1>, std :: _ Placeholder <2>)> ’ не выводится из ‘станд :: function'I»

используя C ++ 11 и g ++ 4.7

Ответы на вопрос(2)

Ваш ответ на вопрос