以下のコードをコンパイルしようとすると、次のエラーが表示されます。関数テンプレートがこれらのクラスの引数の型を自動的に推測することを期待していましたが、これは起こっていません。型を明示的にすると、このコードはコピーされません。
このプロセスで考慮していない/見逃しているC++ルールは何ですか?修正は何ですか?
よろしく
AFG
error: no matching function for call to ‘wrap_call(test<ciccio>&, get_value&)
template <typename T>
struct test{
typedef T value_type;
T m_data;
};
template<typename T,typename F>
typename F::return_type wrap_call( T& obj ,F& f){
return f.operator()(obj);
}
struct ciccio{
int m_value;
};
struct get_value
: std::unary_function<test<ciccio>,ciccio*>
{
ciccio* operator()(test<ciccio>& obj){
return &obj.m_data;
}
};
int main(){
test<ciccio> obj;
get_value g;
ciccio* p = (obj,g);
// same error if I make the types explicit
//ciccio* p = wrap_call<test<ciccio>,get_value>(obj,g);
return 0;
};