テンプレートの呼び出しで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 からのエラー (もちろん 2 回表示されます):
error: no matching function for call to 'test'
candidate template ignored: couldn't infer template argument 'M'
Gcc は文句を言いません。M は戻り型であり、常に「int」であることに注意してください。
誰かがどちらが正しいか、そしてその理由を知っていますか?
ありがとう