From 48d8dd06b0427394bbf678b283354fa27be8dce1 Mon Sep 17 00:00:00 2001
From: Jonathan Wakely <jwakely.gcc@gmail.com>
Date: Mon, 7 Nov 2011 22:26:15 +0000
Subject: [PATCH] mutex (call_once): Store closure in __once_functor as bound
 function wrapper might not be copyable.

	* include/std/mutex (call_once): Store closure in __once_functor
	as bound function wrapper might not be copyable.

From-SVN: r181128
---
 libstdc++-v3/ChangeLog         | 5 +++++
 libstdc++-v3/include/std/mutex | 3 ++-
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index b8c222ba807c..1583ef0aadfb 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,8 @@
+2011-11-07  Jonathan Wakely  <jwakely.gcc@gmail.com>
+
+	* include/std/mutex (call_once): Store closure in __once_functor
+	as bound function wrapper might not be copyable.
+
 2011-11-07  Andrew MacLeod  <amacleod@redhat.com>
 
 	* include/bits/atomic_base.h (atomic_thread_fence): Revert.
diff --git a/libstdc++-v3/include/std/mutex b/libstdc++-v3/include/std/mutex
index bc2675b2b684..69e26e6de84d 100644
--- a/libstdc++-v3/include/std/mutex
+++ b/libstdc++-v3/include/std/mutex
@@ -810,8 +810,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       __once_call = &__once_call_impl<decltype(__bound_functor)>;
 #else
       unique_lock<mutex> __functor_lock(__get_once_mutex());
-      __once_functor = std::__bind_simple(std::forward<_Callable>(__f),
+      auto __callable = std::__bind_simple(std::forward<_Callable>(__f),
           std::forward<_Args>(__args)...);
+      __once_functor = [&]() { __callable(); };
       __set_once_functor_lock_ptr(&__functor_lock);
 #endif
 
-- 
GitLab