* Use beast exclusive valgrind feature.
* Make the library modular usable.
* Switch to library requirements instead of source. As source puts extra source in install targets.
* Add Beast root dir for includes. As some tests refer to files relative to that.
* Replace relative docca refs with project based.
* Avoid mtuliple openssl configurations.
* Always declare openssl. If it's empty and duplicate it will be ignored.
* Add missing import-search for cconfig/predef checks.
* Add requires-b2 check to top-level build file.
* Bump B2 require to 5.2
* Update copyright dates.
* Move inter-lib dependencies to a project variable and into the build targets.
* Update build deps.
* Update build deps.
* The http/client/body example uses the source header from json instead of the linked library.
* Address bind_handler ambiguous overload error when boost/bind/std_placeholders.hpp is included
Previously, the implementation of bind_handler made the assumption
that the trait boost::is_placeholder would be false for types
corresponding to values in the std::placeholders namespace.
However, boost/bind commit c85b31e3d200dda2a73cf0027a82c6d8e29066f8,
`Support use of standard placeholders with boost::bind`, added a new
header, boost/bind/std_placeholders.hpp, which adds specializations to
boost::is_placeholder for std::placeholders types.
When this header is included before a use of boost::bind_handler, it
results in compiler errors like the following, due to an internal
helper function having overloads for
enable_if<boost::is_placeholder...> and
enable_if<std::is_placeholder...>, which were previously assumed to be
mutually exclusive, but for which both conditions now are true:
../../../boost/beast/core/detail/bind_handler.hpp:126:18: error: call of overloaded 'extract(std::_Placeholder<1>, boost::beast::detail::tuple<int&&>)' is ambiguous
126 | h(extract(detail::get<S>(std::move(args)),
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
127 | std::forward<ValsTuple>(vals))...);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
This header is included in boost/bind/bind.hpp, and is transitively
included by headers in many boost libraries including:
algorithm
asio
atomic
graph
msm
multi_index
property_tree
ptr_container
python
signals2
test
thread
Making it possible that an include from one of these libraries will
randomly cause bind_handler to fail to compile.
This change addresses the issue by eliminating one of the ambiguous
overloads and ensuring that boost/bind/std_placeholders.hpp is
included in the bind_handler implementation file, so that the
enable_if<boost::is_placeholder...> overload can handle both
boost::placeholders and std::placeholders values. It also explicitly
adds a boost/bind/std_placeholders.hpp include to the bind_handler
unit test to prevent this issue from regressing.
* Address boost/bind/std_placeholders.hpp feature guards
boost/bind/std_placeholders.hpp has the following feature guards:
if !defined(BOOST_NO_CXX11_HDR_FUNCTIONAL) && !defined(BOOST_NO_CXX11_DECLTYPE) && !defined(BOOST_NO_CXX11_HDR_TYPE_TRAITS)
If this check fails, it will not detect std::placeholders values as
placeholders, making the previous solution fail.
This update restores the std::is_placeholder overload and adjusts the
SFINAE for the boost::is_placeholder overload so that it triggers only
if std::is_placeholder is false, making bind_handler work regardless
of whether std_placeholders.hpp's feature guard applies.
---------
Co-authored-by: Edward Nolan <enolan@maystreet.com>