diff --git a/dune/solvers/common/algorithm.hh b/dune/solvers/common/algorithm.hh
index 20532fcf7a6f954a59e0a58b5c83a860387f578b..1c4a6593ce0fe2820a0eefabe82d1a9658f37102 100644
--- a/dune/solvers/common/algorithm.hh
+++ b/dune/solvers/common/algorithm.hh
@@ -300,22 +300,22 @@ namespace Imp {
   template<class IfFunc, class ElseFunc>
   constexpr void ifElse(std::true_type, IfFunc&& ifFunc, ElseFunc&& elseFunc)
   {
-    ifFunc([](auto&& x) { return std::forward<decltype(x)>(x);});
+    ifFunc([](auto&& x) -> decltype(auto) { return std::forward<decltype(x)>(x);});
   }
 
   template<class IfFunc, class ElseFunc>
   constexpr void ifElse(std::false_type, IfFunc&& ifFunc, ElseFunc&& elseFunc)
   {
-    elseFunc([](auto&& x) { return std::forward<decltype(x)>(x);});
+    elseFunc([](auto&& x) -> decltype(auto) { return std::forward<decltype(x)>(x);});
   }
 
   template<class IfFunc, class ElseFunc>
   constexpr void ifElse(const bool& condition, IfFunc&& ifFunc, ElseFunc&& elseFunc)
   {
     if (condition)
-      ifFunc([](auto&& x) { return std::forward<decltype(x)>(x);});
+      ifFunc([](auto&& x) -> decltype(auto) { return std::forward<decltype(x)>(x);});
     else
-      elseFunc([](auto&& x) { return std::forward<decltype(x)>(x);});
+      elseFunc([](auto&& x) -> decltype(auto) { return std::forward<decltype(x)>(x);});
   }
 
 } // namespace Imp