From Jason Turner

[thread.thread.class]

Diff to HTML by rtfpessoa

tmp/tmphul2_vtn/{from.md → to.md} RENAMED
@@ -148,12 +148,12 @@ representations.
148
 
149
  ``` cpp
150
  template <> struct hash<thread::id>;
151
  ```
152
 
153
- *Requires:* the template specialization shall meet the requirements of
154
- class template `hash` ([[unord.hash]]).
155
 
156
  #### `thread` constructors <a id="thread.thread.constr">[[thread.thread.constr]]</a>
157
 
158
  ``` cpp
159
  thread() noexcept;
@@ -171,10 +171,13 @@ template <class F, class ...Args> explicit thread(F&& f, Args&&... args);
171
  *Requires:*  `F` and each `Ti` in `Args` shall satisfy the
172
  `MoveConstructible` requirements. *`INVOKE`*`(`*`DECAY_COPY`*`(`
173
  `std::forward<F>(f)), `*`DECAY_COPY`*`(std::forward<Args>(args))...)` ([[func.require]])
174
  shall be a valid expression.
175
 
 
 
 
176
  *Effects:*  Constructs an object of type `thread`. The new thread of
177
  execution executes
178
  *`INVOKE`*`(`*`DECAY_COPY`*`(` `std::forward<F>(f)), `*`DECAY_COPY`*`(std::forward<Args>(args))...)`
179
  with the calls to *`DECAY_COPY`* being evaluated in the constructing
180
  thread. Any return value from this invocation is ignored. This implies
 
148
 
149
  ``` cpp
150
  template <> struct hash<thread::id>;
151
  ```
152
 
153
+ The template specialization shall meet the requirements of class
154
+ template `hash` ([[unord.hash]]).
155
 
156
  #### `thread` constructors <a id="thread.thread.constr">[[thread.thread.constr]]</a>
157
 
158
  ``` cpp
159
  thread() noexcept;
 
171
  *Requires:*  `F` and each `Ti` in `Args` shall satisfy the
172
  `MoveConstructible` requirements. *`INVOKE`*`(`*`DECAY_COPY`*`(`
173
  `std::forward<F>(f)), `*`DECAY_COPY`*`(std::forward<Args>(args))...)` ([[func.require]])
174
  shall be a valid expression.
175
 
176
+ *Remarks:* This constructor shall not participate in overload resolution
177
+ if `decay_t<F>` is the same type as `std::thread`.
178
+
179
  *Effects:*  Constructs an object of type `thread`. The new thread of
180
  execution executes
181
  *`INVOKE`*`(`*`DECAY_COPY`*`(` `std::forward<F>(f)), `*`DECAY_COPY`*`(std::forward<Args>(args))...)`
182
  with the calls to *`DECAY_COPY`* being evaluated in the constructing
183
  thread. Any return value from this invocation is ignored. This implies