prog.cpp: In function 'int main()':
prog.cpp:23:48: error: no matching function for call to 'invoke(Foo*, int (Foo::*)(int), int)'
std::cout << invoke( &foo, &Foo::triple, 5 ); // output: 15
^
prog.cpp:6:6: note: candidate: template<class T, class M, class ... Args> decltype (* method) invoke(T*, M, Args&& ...)
auto invoke( T *object, M method, Args&&... args ) -> decltype( *method )
^
prog.cpp:6:6: note: template argument deduction/substitution failed:
prog.cpp: In substitution of 'template<class T, class M, class ... Args> decltype (* method) invoke(T*, M, Args&& ...) [with T = Foo; M = int (Foo::*)(int); Args = {int}]':
prog.cpp:23:48: required from here
prog.cpp:6:65: error: invalid use of unary '*' on pointer to member
auto invoke( T *object, M method, Args&&... args ) -> decltype( *method )
^