diff --git a/dune/common/stdthread.cc b/dune/common/stdthread.cc
index 11e54bfeae351213967a21de0f43973604d4614c..c0bfbb19f96224b66101986413818f17d3bb3078 100644
--- a/dune/common/stdthread.cc
+++ b/dune/common/stdthread.cc
@@ -30,15 +30,20 @@ namespace Dune
                 << msg << std::endl;
     }
 
-  } // anonymous namespace
+    void setBool(bool *v)
+    {
+      *v = true;
+    }
 
+  } // anonymous namespace
 
   void doAssertCallOnce(const char *file, int line, const char *function)
   {
     std::once_flag once;
     bool works = false;
     try {
-      std::call_once(once, [&]{ works = true; });
+      // pass address to works since call_once passes by value
+      std::call_once(once, setBool, &works);
     }
     catch(...) {
       printCallOnceError(file, line, function,
diff --git a/dune/common/stdthread.hh b/dune/common/stdthread.hh
index 3a922b86b9c9e440b4d4e7a8eeddd95803dcc056..9307960f08ef35eba9c806469767b32e49421c58 100644
--- a/dune/common/stdthread.hh
+++ b/dune/common/stdthread.hh
@@ -4,6 +4,7 @@
 #ifndef DUNE_COMMON_STDTHREAD_HH
 #define DUNE_COMMON_STDTHREAD_HH
 
+#include <dune/common/nullptr.hh>
 #include <dune/common/unused.hh>
 
 namespace Dune