template T addMe(T a, T b){ return a+b; }; std::function addString = std::bind(addMe,"first",_1); std::cout << addString("second") << std::endl; auto addString2= std::bind(addMe, "first",_1); std::cout << addString2("second") << std::endl; std::vector myVec{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}; std::copy_if( myVec.begin(), myVec.end(), std::ostream_iterator( std::cout, ", " ), std::bind( std::logical_and(), std::bind( std::greater (),_1,9 ), std::bind( std::less (),_1,16 ))); std::copy_if( myVec.begin(), myVec.end(), std::ostream_iterator( std::cout, ", " ), [](int a){ return (a>9)&&(a<16);});