C++11 deprecates implicit default copy constructors and operators if the class
has user-defined destructor or copy constructor/operator. gcc 9 generates
warnings when this deprecated language feature is used. This commit fixes that
by providing user-defained copy constructors/operators where needed. The
added definitions are equivalent to the implicitly generated by the compiler.
For thread::id, removed copy constructor to allow the compiler generate all
set of constructors and assignment operators, including move.
1. Make inclusion of boost/bind/bind.hpp conditional in some cases, when the
code actually conditionally uses boost::bind. Reduces compile-time overhead
and fixes https://github.com/boostorg/thread/issues/307.
2. Remove some unnecessary uses of boost::ref. This allows to avoid including
boost/core/ref.hpp in a few places, and avoids the associated template
instantiation overhead in others.
3. Replace deprecated header includes with the more recent alternatives. For
example: boost/detail/lightweight_test.hpp -> boost/core/lightweight_test.hpp,
boost/ref.hpp -> boost/core/ref.hpp.
4. Replace some blanket includes with the more fine-grained ones. For example,
boost/utility.hpp, boost/atomic.hpp. This reduces compile time overhead.
5. Add some missing includes, for example, boost/core/ref.hpp and
boost/type_traits/is_same.hpp.
6. Replace uses of std::is_same with boost::is_same (with the corresponding
included header) since the standard type_traits header presence and validity
is not tested by the code. Using boost::is_same makes the code more portable.
The new set of tests iterates over Boost.Thread public headers and verifies that
each header is self-contained, i.e. doesn't have any missing includes and
contains syntactically correct content. On Windows and Cygwin, a second test
per each header is generated, which includes the header after windows.h. This
verifies that the header doesn't have conflicts with Windows SDK and that
includeing windows.h does not break platform detection in Boost.Thread.
This set of tests would have detected the bug fixed by
https://github.com/boostorg/thread/pull/263.
boost::this_thread::sleep_for is allowed to sleep longer than the
requested sleep time. This seems to happen especially on virtualized
systems, such as CircleCI.
This check may or may not be true depending on how long it takes pt1 to
finish executing. You can verify this by adding a sleep before the check
in which case "is_ready()" is always true.
This check may or may not be true depending on how long it takes p1 to
finish executing. You can verify this by adding a sleep before the check
in which case "is_ready()" is always true.