diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index c1ef36c5ba8b4c91ddd53578813f32ae22a0eee1..fa5059e25e8d888fb09bb0ea796f5cb5004aaa07 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,9 @@
+2008-09-04  Chris Fairles  <chris.fairles@gmail.com>
+
+        * include/std/mutex (once_flag): Construct __gthread_once_t in a
+	temporary variable before assigning to _M_once to avoid initialization
+	errors. 
+
 2008-09-03  Paolo Carlini  <paolo.carlini@oracle.com>
 
 	* config/abi/pre/gnu.ver: Also export __once_functor_lock; tighten
diff --git a/libstdc++-v3/include/std/mutex b/libstdc++-v3/include/std/mutex
index 5e6ba9c271556ed59b32c36ad33dd2f81365d35d..e4ceaf2aac893a83b3f3b3bbaa88dc06590a0f17 100644
--- a/libstdc++-v3/include/std/mutex
+++ b/libstdc++-v3/include/std/mutex
@@ -615,8 +615,10 @@ namespace std
     typedef __gthread_once_t __native_type;
 
     once_flag()
-    : _M_once(__GTHREAD_ONCE_INIT)
-    { }
+    {
+      __gthread_once_t __tmp = __GTHREAD_ONCE_INIT;
+      _M_once = __tmp;
+    }
     
     once_flag(const once_flag&) = delete;
     once_flag& operator=(const once_flag&) = delete;