我一直在尝试用clang编译一个项目(使用gcc/g++很好),并且编译停留在模板调用上。我尝试创建显示相同错误消息的最简单的类似代码。这里是:
#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”。
有人知道哪个是正确的,为什么?
谢谢