Я пытаюсь скомпилировать проект (который отлично использует gcc/g++) с clang и компиляцией, застрявшей в вызове шаблона. Я попытался создать простейший аналогичный фрагмент кода с тем же сообщением об ошибке. Вот он:
#include <vector>
#include <utility>
#include <iostream>
using namespace std;
int A( double in )
{
return 1;
}
int A( int in )
{
return 1;
}
template<class M, class T>
M test(T input, M (fun) (T) )
{
return fun( input );
}
int main( int argc, const char *argv[] )
{
cout << test( (int) 1, A ) << test( (double) 1.2, A ) << endl;
return 0;
}
Ошибка от clang (отображается дважды, конечно):
error: no matching function for call to 'test'
candidate template ignored: couldn't infer template argument 'M'
Gcc не жалуется. Обратите внимание: M - это тип возврата и всегда "int".
Кто-нибудь знает, что правильно и почему?
Спасибо