@@ -125,7 +125,7 @@ list<T> append(list<T> const & l1, list<T> const & l2) {
125125/* * \brief Given list <tt>(a_0, ..., a_k)</tt>, return list <tt>(f(a_0), ..., f(a_k))</tt>. */
126126template <typename To, typename From, typename F>
127127list<To> map2 (list<From> const & l, F && f) {
128- static_assert (std::is_same<typename std::result_of <F (From const &)>::type, To>::value,
128+ static_assert (std::is_same<typename std::invoke_result <F (From const &)>::type, To>::value,
129129 " map: return type of f is not equal to input type" );
130130 if (is_nil (l)) {
131131 return list<To>();
@@ -271,7 +271,7 @@ list<T> map_reuse(list<T> const & l, F && f, Eq const & eq = Eq()) {
271271/* * \brief Given list <tt>(a_0, ..., a_k)</tt>, exec f(a_0); f(a_1); ... f(a_k)</tt>. */
272272template <typename T, typename F>
273273void for_each (list<T> const & l, F && f) {
274- static_assert (std::is_same<typename std::result_of <F (T const &)>::type, void >::value,
274+ static_assert (std::is_same<typename std::invoke_result <F (T const &)>::type, void >::value,
275275 " for_each: return type of f is not void" );
276276 typedef typename list<T>::cell cell;
277277 cell * it = l.raw ();
@@ -285,7 +285,7 @@ void for_each(list<T> const & l, F && f) {
285285 exec f(a_0, b_0); f(a_1, b_1); ... f(a_k, b_k)</tt>. */
286286template <typename T1, typename T2, typename F>
287287void for_each2 (list<T1> const & l1, list<T2> const & l2, F && f) {
288- static_assert (std::is_same<typename std::result_of <F (T1 const &, T2 const &)>::type, void >::value,
288+ static_assert (std::is_same<typename std::invoke_result <F (T1 const &, T2 const &)>::type, void >::value,
289289 " for_each2: return type of f is not void" );
290290 typedef typename list<T1>::cell cell1;
291291 typedef typename list<T2>::cell cell2;
@@ -303,7 +303,7 @@ void for_each2(list<T1> const & l1, list<T2> const & l2, F && f) {
303303 exec f(a_0, b_0, c_0); f(a_1, b_1, c_1); ... f(a_k, b_k, c_k)</tt>. */
304304template <typename T1, typename T2, typename T3, typename F>
305305void for_each3 (list<T1> const & l1, list<T2> const & l2, list<T3> const & l3, F && f) {
306- static_assert (std::is_same<typename std::result_of <F (T1 const &, T2 const &, T3 const &)>::type, void >::value,
306+ static_assert (std::is_same<typename std::invoke_result <F (T1 const &, T2 const &, T3 const &)>::type, void >::value,
307307 " for_each2: return type of f is not void" );
308308 typedef typename list<T1>::cell cell1;
309309 typedef typename list<T2>::cell cell2;
@@ -322,7 +322,7 @@ void for_each3(list<T1> const & l1, list<T2> const & l2, list<T3> const & l3, F
322322/* * \brief Compare two lists using the binary predicate p. */
323323template <typename T, typename P>
324324bool compare (list<T> const & l1, list<T> const & l2, P && p) {
325- static_assert (std::is_same<typename std::result_of <P (T const &, T const &)>::type, bool >::value,
325+ static_assert (std::is_same<typename std::invoke_result <P (T const &, T const &)>::type, bool >::value,
326326 " compare: return type of f is not bool" );
327327 auto it1 = l1.begin ();
328328 auto it2 = l2.begin ();
0 commit comments