読者です 読者をやめる 読者になる 読者になる

std::functionをパラメータにとる関数に関数オブジェクトを渡す?

C++

これできないんだっけ?

#include <functional>

struct functor {
    typedef void result_type;
    void operator()() const {}
};

template <class R, class ...Args>
void foo(std::function<R(Args...)> f) {}

int main()
{
    foo(functor()); // エラー!
}

ConceptGCCでは、foo(functor())にマッチするオーバーロードがないってエラーになって
VC++9.0 SP1で可変引数テンプレートを使わずにやってみて、やっぱりエラーになった。