The standard requires that the std::thread constructor is constrained so it can't be called with a first argument of type std::thread. The current implementation only meets that requirement if the constructor is called with one argument, by using deleted overloads. This uses an enable_if constraint to enforce the requirement for any number of arguments. Also add a static assertion to give a more readable error for invalid arguments that cannot be invoked. Also simplify _Invoker to reduce the error cascade for ill-formed instantiations with non-invocable arguments. PR libstdc++/84535 * include/std/thread (thread::__not_same): New SFINAE helper. (thread::thread(_Callable&&, _Args&&...)): Add SFINAE constraint that first argument is not a std::thread. Add static assertion to check INVOKE expression is valid. (thread::thread(thread&), thread::thread(const thread&&)): Remove. (thread::_Invoke::_M_invoke, thread::_Invoke::operator()): Use __invoke_result for return types and remove exception specifications. * testsuite/30_threads/thread/cons/84535.cc: New. From-SVN: r259893
Name |
Last commit
|
Last update |
---|---|---|
.. | ||
algorithm | Loading commit data... | |
any | Loading commit data... | |
array | Loading commit data... | |
atomic | Loading commit data... | |
bitset | Loading commit data... | |
charconv | Loading commit data... | |
chrono | Loading commit data... | |
codecvt | Loading commit data... | |
complex | Loading commit data... | |
condition_variable | Loading commit data... | |
deque | Loading commit data... | |
filesystem | Loading commit data... | |
forward_list | Loading commit data... | |
fstream | Loading commit data... | |
functional | Loading commit data... | |
future | Loading commit data... | |
iomanip | Loading commit data... | |
ios | Loading commit data... | |
iosfwd | Loading commit data... | |
iostream | Loading commit data... | |
istream | Loading commit data... | |
iterator | Loading commit data... | |
limits | Loading commit data... | |
list | Loading commit data... | |
locale | Loading commit data... | |
map | Loading commit data... | |
memory | Loading commit data... | |
mutex | Loading commit data... | |
numeric | Loading commit data... | |
optional | Loading commit data... | |
ostream | Loading commit data... | |
queue | Loading commit data... | |
random | Loading commit data... | |
ratio | Loading commit data... | |
regex | Loading commit data... | |
scoped_allocator | Loading commit data... | |
set | Loading commit data... | |
shared_mutex | Loading commit data... | |
sstream | Loading commit data... | |
stack | Loading commit data... | |
stdexcept | Loading commit data... | |
streambuf | Loading commit data... | |
string | Loading commit data... | |
string_view | Loading commit data... | |
system_error | Loading commit data... | |
thread | Loading commit data... | |
tuple | Loading commit data... | |
type_traits | Loading commit data... | |
typeindex | Loading commit data... | |
unordered_map | Loading commit data... | |
unordered_set | Loading commit data... | |
utility | Loading commit data... | |
valarray | Loading commit data... | |
variant | Loading commit data... | |
vector | Loading commit data... |