This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of C++11 status.

### 963. Various threading bugs #13

Section: 32.4.3.6 [thread.thread.member] Status: C++11 Submitter: Pete Becker Opened: 2009-01-07 Last modified: 2016-01-28

Priority: Not Prioritized

View all other issues in [thread.thread.member].

View all issues with C++11 status.

Discussion:

32.4.3.6 [thread.thread.member]: `thread::detach` is required to throw an exception if the thread is "not a detachable thread". "Detachable" is never defined.

[ Howard adds: ]

> Due to a mistake on my part, 3 proposed resolutions appeared at approximately the same time. They are all three noted below in the discussion.

[ Summit, proposed resolution: ]

> In 32.4.3.6 [thread.thread.member] change:

> >     void detach();

> > > ...

> > > -14- Error conditions:

> > > - `no_such_process` -- if the thread is not a valid thread.
> > > - `invalid_argument` -- if the thread is not a detachable joinable thread.

[ Post Summit, Jonathan Wakely adds: ]

> A `thread` is detachable if it is joinable. As we've defined joinable, we can just use that.

> This corresponds to the pthreads specification, where pthread_detach fails if the thread is not joinable:

> > EINVAL: The implementation has detected that the value specified by thread does not refer to a joinable thread.

> Jonathan recommends this proposed wording:

> > In 32.4.3.6 [thread.thread.member] change:

> > >     void detach();

> > > > ...

> > > > -14- Error conditions:

> > > > - ...
> > > > - `invalid_argument` -- not a detachable joinable thread.

[ Post Summit, Anthony Williams adds: ]

> This is covered by the precondition that `joinable()` be `true`.

> Anthony recommends this proposed wording:

> > In 32.4.3.6 [thread.thread.member] change:

> > >     void detach();

> > > > ...

> > > > -14- Error conditions:

> > > > - ...
> > > > - `invalid_argument` -- not a detachable thread.

[ 2009-10 Santa Cruz: ]

> Mark as Ready with proposed resolution from Summit.

Proposed resolution:

In 32.4.3.6 [thread.thread.member] change:

>     void detach();

> > ...

> > -14- Error conditions:

> > - `no_such_process` -- if the thread is not a valid thread.
> > - `invalid_argument` -- if the thread is not a detachable joinable thread.