diff --git a/dune/solvers/iterationsteps/blockgssteps.hh b/dune/solvers/iterationsteps/blockgssteps.hh
index 7ed5a385c6cab2cd83b3c18d0472320ab4cbe19c..f15e7f70c5214ec2923e86fba60f38313372bc11 100644
--- a/dune/solvers/iterationsteps/blockgssteps.hh
+++ b/dune/solvers/iterationsteps/blockgssteps.hh
@@ -3,6 +3,7 @@
 
 #include <cassert>
 #include <functional>
+#include <type_traits>
 
 #include <dune/common/parametertree.hh>
 
@@ -181,7 +182,7 @@ template <class LinearSolver>
 auto truncateSymmetrically(LinearSolver&& linearSolver) {
   return [linearSolver = std::move(linearSolver) ](
       const auto& m, const auto& b, const auto& ignore) {
-    using Return = typename std::result_of<LinearSolver(decltype(m), decltype(b))>::type;
+    using Return = std::invoke_result_t<LinearSolver, decltype(m), decltype(b)>;
     if (ignore.all())
       return Return(0);