This improves the fairly uninformative "Operation not supported"
message given when std::thread is used without linking to libpthread.

Now you get:

terminate called after throwing an instance of 'std::system_error'
  what():  Enable multithreading to use std::thread: Operation not permitted
Aborted

        PR libstdc++/52681
        * src/c++11/thread.cc (thread::_M_start_thread): Improve error text
        when threads are not enabled.

Tested x86_64-linux, with exceptions enabled and disabled. Committed to trunk.
commit d79ac9a14880d5f20fd62c72d87c4f3405727350
Author: redi <redi@138bc75d-0d04-0410-961f-82ee72b054a4>
Date:   Sun Aug 12 18:57:53 2012 +0000

        PR libstdc++/52681
        * src/c++11/thread.cc (thread::_M_start_thread): Improve error text
        when threads are not enabled.
    
    git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@190330 
138bc75d-0d04-0410-961f-82ee72b054a4

diff --git a/libstdc++-v3/src/c++11/thread.cc b/libstdc++-v3/src/c++11/thread.cc
index ff034b1..5c10832 100644
--- a/libstdc++-v3/src/c++11/thread.cc
+++ b/libstdc++-v3/src/c++11/thread.cc
@@ -115,7 +115,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   thread::_M_start_thread(__shared_base_type __b)
   {
     if (!__gthread_active_p())
+#if __EXCEPTIONS
+      throw system_error(make_error_code(errc::operation_not_permitted),
+                        "Enable multithreading to use std::thread");
+#else
       __throw_system_error(int(errc::operation_not_permitted));
+#endif
 
     __b->_M_this_ptr = __b;
     int __e = __gthread_create(&_M_id._M_thread,

Reply via email to