1. 程式人生 > 其它 >boost::bind 不能處理函式過載 (error: no matching function for call to 'bind')

boost::bind 不能處理函式過載 (error: no matching function for call to 'bind')

前言

最近任務多、工期緊,沒有時間更新部落格,就水一期吧。雖然是水,也不能太失水準,剛好最近工作中遇到一個 boost::bind 的問題,花費了半天時間來定位解決,就說說它吧。

問題背景

專案中使用了 boost 的 ios_service,任務都是 post 到對應執行緒去執行,這樣可以避免複雜的多執行緒同步問題,有點類似早年間 COM 的單執行緒套間模型。不過這就需要將介面通過 bind 封裝為函式物件傳遞給 ios_service,之前的程式碼都工作正常,但我新增了一個介面後,卻怎麼也編譯不過,報下面的錯誤 (超長內容,展開謹慎):

檢視程式碼
jni/../../Task/jni/../jni/../../xxxx/jni/../xxxx_xxxxxxxxx.cpp:3414:48: error: no matching function for call to 'bind'
        xxxxxxxxxxx::instance()->getIOS().post(boost::bind(&xxxxxxxxxxxxx::create_task, 
                                               ^~~~~~~~~~~
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1907:5: note: candidate template ignored: couldn't infer template argument 'R'
    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1981:5: note: candidate template ignored: couldn't infer template argument 'R'
    BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2, A3 a3)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:2073:5: note: candidate template ignored: couldn't infer template argument 'F'
    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_cc.hpp:57:5: note: candidate template ignored: couldn't infer template argument 'R'
    BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4) BOOST_BIND_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf_cc.hpp:161:5: note: candidate template ignored: couldn't infer template argument
      'R'
    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf_cc.hpp:172:5: note: candidate template ignored: couldn't infer template argument
      'R'
    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf_cc.hpp:184:13: note: candidate template ignored: couldn't infer template argument
      'Rt2'
    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4)
            ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf_cc.hpp:196:13: note: candidate template ignored: couldn't infer template argument
      'Rt2'
    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4)
            ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf2_cc.hpp:68:5: note: candidate template ignored: could not match
      'R (T::*)(B1, B2)' against 'boost::shared_ptr<xxxxxxxxxxxxx>'
    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2), A1 a1, A2 a2, A3 a3)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf2_cc.hpp:79:5: note: candidate template ignored: could not match
      'R (T::*)(B1, B2) const' against 'boost::shared_ptr<xxxxxxxxxxxxx>'
    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2) const, A1 a1, A2 a2, A3 a3)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1875:5: note: candidate function template not viable: requires single argument
      'f', but 5 arguments were provided
    BOOST_BIND(F f)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1883:5: note: candidate function template not viable: requires 2 arguments, but
      5 were provided
    BOOST_BIND(F f, A1 a1)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1891:5: note: candidate function template not viable: requires 3 arguments, but
      5 were provided
    BOOST_BIND(F f, A1 a1, A2 a2)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1899:5: note: candidate function template not viable: requires 4 arguments, but
      5 were provided
    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1915:5: note: candidate function template not viable: requires 6 arguments, but
      5 were provided
    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1923:5: note: candidate function template not viable: requires 7 arguments, but
      5 were provided
    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1931:5: note: candidate function template not viable: requires 8 arguments, but
      5 were provided
    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1939:5: note: candidate function template not viable: requires 9 arguments, but
      5 were provided
    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1947:5: note: candidate function template not viable: requires 10 arguments, but
      5 were provided
    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1957:5: note: candidate function template not viable: requires 2 arguments, but
      5 were provided
    BOOST_BIND(boost::type<R>, F f)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1965:5: note: candidate function template not viable: requires 3 arguments, but
      5 were provided
    BOOST_BIND(boost::type<R>, F f, A1 a1)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1973:5: note: candidate function template not viable: requires 4 arguments, but
      5 were provided
    BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1989:5: note: candidate function template not viable: requires 6 arguments, but
      5 were provided
    BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2, A3 a3, A4 a4)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1997:5: note: candidate function template not viable: requires 7 arguments, but
      5 were provided
    BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:2005:5: note: candidate function template not viable: requires 8 arguments, but
      5 were provided
    BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:2013:5: note: candidate function template not viable: requires 9 arguments, but
      5 were provided
    BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:2021:5: note: candidate function template not viable: requires 10 arguments, but
      5 were provided
    BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:2029:5: note: candidate function template not viable: requires 11 arguments, but
      5 were provided
    BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:2041:5: note: candidate function template not viable: requires single argument
      'f', but 5 arguments were provided
    BOOST_BIND(F f)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:2049:5: note: candidate function template not viable: requires 2 arguments, but
      5 were provided
    BOOST_BIND(F f, A1 a1)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:2057:5: note: candidate function template not viable: requires 3 arguments, but
      5 were provided
    BOOST_BIND(F f, A1 a1, A2 a2)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:2065:5: note: candidate function template not viable: requires 4 arguments, but
      5 were provided
    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:2081:5: note: candidate function template not viable: requires 6 arguments, but
      5 were provided
    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:2089:5: note: candidate function template not viable: requires 7 arguments, but
      5 were provided
    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:2097:5: note: candidate function template not viable: requires 8 arguments, but
      5 were provided
    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:2105:5: note: candidate function template not viable: requires 9 arguments, but
      5 were provided
    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:2113:5: note: candidate function template not viable: requires 10 arguments, but
      5 were provided
    BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_cc.hpp:17:5: note: candidate function template not viable: requires single argument
      'f', but 5 arguments were provided
    BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) () BOOST_BIND_NOEXCEPT)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_cc.hpp:26:5: note: candidate function template not viable: requires 2 arguments, but
      5 were provided
    BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1) BOOST_BIND_NOEXCEPT, A1 a1)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_cc.hpp:35:5: note: candidate function template not viable: requires 3 arguments, but
      5 were provided
    BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2) BOOST_BIND_NOEXCEPT, A1 a1, A2 a2)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_cc.hpp:46:5: note: candidate function template not viable: requires 4 arguments, but
      5 were provided
    BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3) BOOST_BIND_NOEXCEPT, A1 a1, A2 a2, A3 a3)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_cc.hpp:68:5: note: candidate function template not viable: requires 6 arguments, but
      5 were provided
    BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5) BOOST_BIND_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_cc.hpp:79:5: note: candidate function template not viable: requires 7 arguments, but
      5 were provided
    BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5, B6) BOOST_BIND_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_cc.hpp:90:5: note: candidate function template not viable: requires 8 arguments, but
      5 were provided
    BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5, B6, B7) BOOST_BIND_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_cc.hpp:101:5: note: candidate function template not viable: requires 9 arguments,
      but 5 were provided
    BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5, B6, B7, B8) BOOST_BIND_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, ...
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_cc.hpp:112:5: note: candidate function template not viable: requires 10 arguments,
      but 5 were provided
    BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5, B6, B7, B8, B9) BOOST_BIND_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 ...
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf_cc.hpp:20:5: note: candidate function template not viable: requires 2 arguments,
      but 5 were provided
    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) () BOOST_BIND_MF_NOEXCEPT, A1 a1)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf_cc.hpp:30:5: note: candidate function template not viable: requires 2 arguments,
      but 5 were provided
    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) () const BOOST_BIND_MF_NOEXCEPT, A1 a1)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf_cc.hpp:41:13: note: candidate function template not viable: requires 2 arguments,
      but 5 were provided
    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) () BOOST_BIND_MF_NOEXCEPT, A1 a1)
            ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf_cc.hpp:52:13: note: candidate function template not viable: requires 2 arguments,
      but 5 were provided
    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) () const BOOST_BIND_MF_NOEXCEPT, A1 a1)
            ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf_cc.hpp:65:5: note: candidate function template not viable: requires 3 arguments,
      but 5 were provided
    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf_cc.hpp:76:5: note: candidate function template not viable: requires 3 arguments,
      but 5 were provided
    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf_cc.hpp:88:13: note: candidate function template not viable: requires 3 arguments,
      but 5 were provided
    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2)
            ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf_cc.hpp:100:13: note: candidate function template not viable: requires 3
      arguments, but 5 were provided
    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2)
            ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf_cc.hpp:113:5: note: candidate function template not viable: requires 4 arguments,
      but 5 were provided
    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf_cc.hpp:124:5: note: candidate function template not viable: requires 4 arguments,
      but 5 were provided
    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf_cc.hpp:136:13: note: candidate function template not viable: requires 4
      arguments, but 5 were provided
    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3)
            ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf_cc.hpp:148:13: note: candidate function template not viable: requires 4
      arguments, but 5 were provided
    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3)
            ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf_cc.hpp:209:5: note: candidate function template not viable: requires 6 arguments,
      but 5 were provided
    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf_cc.hpp:220:5: note: candidate function template not viable: requires 6 arguments,
      but 5 were provided
    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf_cc.hpp:232:13: note: candidate function template not viable: requires 6
      arguments, but 5 were provided
    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)
            ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf_cc.hpp:244:13: note: candidate function template not viable: requires 6
      arguments, but 5 were provided
    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)
            ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf_cc.hpp:257:5: note: candidate function template not viable: requires 7 arguments,
      but 5 were provided
    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf_cc.hpp:268:5: note: candidate function template not viable: requires 7 arguments,
      but 5 were provided
    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf_cc.hpp:280:13: note: candidate function template not viable: requires 7
      arguments, but 5 were provided
    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)
            ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf_cc.hpp:292:13: note: candidate function template not viable: requires 7
      arguments, but 5 were provided
    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)
            ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf_cc.hpp:305:5: note: candidate function template not viable: requires 8 arguments,
      but 5 were provided
    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf_cc.hpp:316:5: note: candidate function template not viable: requires 8 arguments,
      but 5 were provided
    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf_cc.hpp:328:13: note: candidate function template not viable: requires 8
      arguments, but 5 were provided
    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)
            ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf_cc.hpp:340:13: note: candidate function template not viable: requires 8
      arguments, but 5 were provided
    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)
            ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf_cc.hpp:353:5: note: candidate function template not viable: requires 9 arguments,
      but 5 were provided
    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf_cc.hpp:364:5: note: candidate function template not viable: requires 9 arguments,
      but 5 were provided
    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 ...
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf_cc.hpp:376:13: note: candidate function template not viable: requires 9
      arguments, but 5 were provided
    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A...
            ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf_cc.hpp:388:13: note: candidate function template not viable: requires 9
      arguments, but 5 were provided
    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A...
            ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf_cc.hpp:401:5: note: candidate function template not viable: requires 10
      arguments, but 5 were provided
    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7, B8) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7...
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf_cc.hpp:412:5: note: candidate function template not viable: requires 10
      arguments, but 5 were provided
    BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7, B8) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6...
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf_cc.hpp:424:13: note: candidate function template not viable: requires 10
      arguments, but 5 were provided
    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7, B8) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a...
            ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf_cc.hpp:436:13: note: candidate function template not viable: requires 10
      arguments, but 5 were provided
    >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7, B8) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5...
            ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf2_cc.hpp:21:5: note: candidate function template not viable: requires 3 arguments,
      but 5 were provided
    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (), A1 a1)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf2_cc.hpp:31:5: note: candidate function template not viable: requires 3 arguments,
      but 5 were provided
    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) () const, A1 a1)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf2_cc.hpp:44:5: note: candidate function template not viable: requires 4 arguments,
      but 5 were provided
    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1), A1 a1, A2 a2)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf2_cc.hpp:55:5: note: candidate function template not viable: requires 4 arguments,
      but 5 were provided
    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1) const, A1 a1, A2 a2)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf2_cc.hpp:92:5: note: candidate function template not viable: requires 6 arguments,
      but 5 were provided
    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3), A1 a1, A2 a2, A3 a3, A4 a4)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf2_cc.hpp:103:5: note: candidate function template not viable: requires 6
      arguments, but 5 were provided
    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3) const, A1 a1, A2 a2, A3 a3, A4 a4)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf2_cc.hpp:116:5: note: candidate function template not viable: requires 7
      arguments, but 5 were provided
    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf2_cc.hpp:127:5: note: candidate function template not viable: requires 7
      arguments, but 5 were provided
    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf2_cc.hpp:140:5: note: candidate function template not viable: requires 8
      arguments, but 5 were provided
    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf2_cc.hpp:151:5: note: candidate function template not viable: requires 8
      arguments, but 5 were provided
    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf2_cc.hpp:164:5: note: candidate function template not viable: requires 9
      arguments, but 5 were provided
    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf2_cc.hpp:175:5: note: candidate function template not viable: requires 9
      arguments, but 5 were provided
    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf2_cc.hpp:188:5: note: candidate function template not viable: requires 10
      arguments, but 5 were provided
    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf2_cc.hpp:199:5: note: candidate function template not viable: requires 10
      arguments, but 5 were provided
    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf2_cc.hpp:212:5: note: candidate function template not viable: requires 11
      arguments, but 5 were provided
    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7, B8), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 ...
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind_mf2_cc.hpp:223:5: note: candidate function template not viable: requires 11
      arguments, but 5 were provided
    BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7, B8) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a...
    ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:2342:1: note: candidate function template not viable: requires 2 arguments, but
      5 were provided
BOOST_BIND( M T::*f, A1 a1 )
^
jni/../../Task/jni/../../../third-party/boost/include/boost/bind/bind.hpp:1868:20: note: expanded from macro 'BOOST_BIND'
#define BOOST_BIND bind
                   ^
1 error generated.

錯誤看著挺唬人,其實關鍵的就是第一句:

jni/../../Task/jni/../jni/../../xxxx/jni/../xxxx_xxxxxxxxx.cpp:3414:48: error: no matching function for call to 'bind'
        xxxxxxxxxxx::instance()->getIOS().post(boost::bind(&xxxxxxxxxxxxx::create_task, 
                                               ^~~~~~~~~~~

boost::bind create_task 這個介面時出錯了,百度了下這個錯誤,網上比較多的說法是 bind 給的引數和介面宣告不一致,可是仔細檢查了三遍引數,都沒有發現問題,甚至把 post 改成直接呼叫的形式,這個就可以通過編譯,真是神了~

另外查資料的過程中,發現 bind 最多支援 9 個引數,超過就不行了。不過在我的場景裡,只有 4 個引數,所以也不是這方面的問題,可以排除。

排查過程

為了簡化問題的排查過程,排除其它因素干擾,我寫了一個簡單例子:

#include <iostream>
#include <functional> 

using namespace std; 

int create_task(int);
int create_task(int, int);

int main(int argc, char* argv[])
{
    auto f1 = bind(create_task, 1, 2); 
    f1(); 
    return 0; 
}

int create_task(int a)
{
    cout << "create_task (" << a << ") called" << endl; 
    return 0; 
} 

int create_task(int a, int b)
{
    cout << "create_task (" << a << ", " << b << ") called" << endl; 
    return 0; 
}

 這裡使用了 std bind 而不是 boost bind,不過一樣可以復現出錯場景,同時避免引入 boost 靜態庫導致 demo 太過複雜:

$ make
g++ -Wall -g -c bindemo.cpp -o bindemo.o -std=c++11
bindemo.cpp: In function ‘int main(int, char**)’:
bindemo.cpp:11:37: error: no matching function for call to ‘bind(<unresolved overloaded function type>, int, int)’
     auto f1 = bind(create_task, 1, 2); 
                                     ^
bindemo.cpp:11:37: note: candidates are:
In file included from bindemo.cpp:2:0:
/usr/include/c++/4.8.2/functional:1655:5: note: template<class _Func, class ... _BoundArgs> typename std::_Bind_helper<std::__or_<std::is_integral<typename std::decay<_Tp>::type>, std::is_enum<typename std::decay<_Tp>::type> >::value, _Func, _BoundArgs ...>::type std::bind(_Func&&, _BoundArgs&& ...)
     bind(_Func&& __f, _BoundArgs&&... __args)
     ^
/usr/include/c++/4.8.2/functional:1655:5: note:   template argument deduction/substitution failed:
bindemo.cpp:11:37: note:   couldn't deduce template parameter ‘_Func’
     auto f1 = bind(create_task, 1, 2); 
                                     ^
In file included from bindemo.cpp:2:0:
/usr/include/c++/4.8.2/functional:1682:5: note: template<class _Result, class _Func, class ... _BoundArgs> typename std::_Bindres_helper<_Result, _Func, _BoundArgs>::type std::bind(_Func&&, _BoundArgs&& ...)
     bind(_Func&& __f, _BoundArgs&&... __args)
     ^
/usr/include/c++/4.8.2/functional:1682:5: note:   template argument deduction/substitution failed:
bindemo.cpp:11:37: note:   couldn't deduce template parameter ‘_Result’
     auto f1 = bind(create_task, 1, 2); 
                                     ^
make: *** [bindemo.o] Error 1

其實看了這個 demo,很多人都會懷疑一個問題——是不是過載的 create_task 出了問題呢?確實如此,其實我只要將另一個 create_task 的宣告註釋掉 (實現仍保留),這個 demo 就可以編譯通過了,執行效果如下:

$ ./bindemo
create_task (1, 2) called

不過我在當初查這個問題的時候可是費了九牛二虎之力,因為引數使用了引用型別,一開始懷疑是引用的鍋,直接使用指標,不行;然後懷疑是沒有為引用引數新增 boost::ref,也不行;最後直接把 bind 介面改成另外一個成員函式 (start_task),無意中居然通過了。不過此時我仍懷疑是引數的問題,於是增加了一個同名的函式過載,引數照抄 create_task,結果就失敗了;最神奇的是改為之前那版 start_task 也不行了,這才開始懷疑是函式過載的問題。

解決方案

知道了問題原因,改起來就比較順了,因為新版的 create_task 增加了一個結構體作為引數,於是乾脆將它重新命名為 create_task_param,這樣再繫結就沒有問題了。

後記

問題雖然解決了,但是 bind 為何對過載函式如此“無能為力”呢?按理說根據提供給 bind 的引數,再匹配過載函式的引數列表,應該可以挑選正確的過載版本。

不過換個角度思考,bind 支援佔位符,上面的例子中,我可以這樣寫:

int main(int argc, char* argv[])
{
    auto f1 = bind(create_task, 1, 2); 
    f1(); 
    auto f2 = bind(create_task, placeholders::_1, 0); 
    f2(3); 
    return 0; 
}

其中 f2 有一個引數使用了佔位符,這個引數將在呼叫時才傳遞,而 bind 需要在繫結那一刻知道使用的是哪個版本的 create_task,針對這個例子,他只有一個兩引數的版本可選,但如果有多個兩引數且第二引數為 int 型別的過載版本的話,bind 就迷糊了,畢竟他不知道後面使用者會給佔位符傳遞什麼型別的引數不是?所以我猜測為了避免類似的問題,c++ 乾脆不讓 bind 支援過載函式,直接出錯了事,編譯期錯誤總比執行期錯誤好解決,你覺得呢?

當然,比較迷的是,這裡只有一個兩引數的版本,bind 仍然報錯了,這是夠懶的。另外有些網上的文章說 (附錄 4),bind 會挑選過載函式中第一個宣告的版本,如果通過就通過,如果不通過就報錯。但是我實際測試的情況是,無論將兩引數的版本放在前面還是後面,都報錯,除非不宣告,看起來我這個 gcc 版本是嚴格執行了 c++ 標準滴~

參考

[1]. boost::bind對引用的特殊處理_hacker_lpy的部落格-CSDN部落格

[2]. Boost::bind使用詳解 - jackjoe - 部落格園

[3]. 關於std::function和std::bind繫結成員函式

[4]. boost::bind with overloaded functions?

[5]. 使用boost::bind和過載函式的訪客模式