| 1738 | typename std::remove_reference<typename std::remove_const<FIn2>::type>::type>, |
| 1739 | typename MemoMap = std::unordered_map<ParamPair, FOut>> |
| 1740 | std::function<FOut(FIn1, FIn2)> memoize_binary(F f) |
| 1741 | { |
| 1742 | const auto unary_f = [f](const ParamPair& params) -> FOut { |
| 1743 | return internal::invoke(f, params.first, params.second); |
| 1744 | }; |
| 1745 | auto unary_f_memoized = memoize<decltype(unary_f), |
| 1746 | ParamPair, FOut, std::map<ParamPair, FOut>>(unary_f); |
| 1747 | return [unary_f_memoized](FIn1 a, FIn2 b) mutable -> FOut { |
| 1748 | return unary_f_memoized(std::make_pair(a, b)); |
| 1749 | }; |
| 1750 | } |
| 1751 | |
| 1752 | // API search type: constructor_as_function : a -> b |
| 1753 | // struct foo |