#include #include #include #include using namespace std ; template class Proxy { Callable c_; public: Proxy(Callable c) : c_{ std::move(c) } {} template decltype(auto) operator()(Args&&... args) { // ... return std::invoke(c_, std::forward(args)...); } }; int add2Nos( int x1 , int y1 ) { return x1 + y1 ; } int main() { //Lambda const auto add = [](int x, int y) { return x + y; }; Proxy p1{ add }; int result = p1(1, 2); // == 3 cout << "result: " << result << endl ; //Regular function Proxy p2{ add2Nos }; result = p2( 3, 4 ); // == 3 cout << "result: " << result << endl ; return 1 ; }