#include <functional>
#include <iostream>

struct compare_equal{
  template<class LHS, class RHS>
  bool operator()(LHS&& lhs, RHS&& rhs){ // assume bool return
    return std::forward<LHS>(lhs) == std::forward<RHS>(rhs);
  }
};

int main(){
  using std::placeholders::_1;
  auto equals_five = std::bind(compare_equal(), _1, 5);
  std::cout << std::boolalpha << equals_five(5);
}