Anything I'm missing on this delegate implementation?
You are missing const and volatile qualified method pointer versions.

Example:

template&lt;class Obj, class R&gt;
struct DelegateHelper&lt;R (Obj::*)() const&gt;{
    typedef R (Obj::*FuncPtr)() const;

    DelegateHelper(const Obj* obj_ptr, FuncPtr func)
        : object_(obj_ptr)
        , func_(func)
    {}

    R operator()(){
        return (object_-&gt;*func_)();
    }

    const Obj* object_;
    FuncPtr func_;
};


Also, you may (probably) need specializations or internal delegates for handling of functions with void return values. Someone else may be able to fill in the details, but it seems some compilers are OK with

return function_returning_void();


And others are not.

Another thing that makes the boost version and some others larger is being able to accept &amp; or * arguments for the object value when calling methods.