which checks is_nothrow_copy_constructible_v<executor_t>, which fails,
because basic_system_executor has copy special member functions implicitly defaulted, which makes them noexcept(false),
because basic_system_executor has a member of type my_allocator_t and
boost::container::pmr::polymorphic_allocator<T> has user-provided copy constructor/assignment functions that are not marked noexcept, defaulting to noexcept(false).
While many "Throws: Nothing." functions are not noexcept at the language level for various reasons, I believe ASIO has the right to check this property formally on special member functions. Copy constructor/assignment functions in boost::container::polymorphic_allocator should either be marked BOOST_NOEXCEPT or removed altogether (which would also make them trivial). I don't know whether changing their triviality could be a problem and where their docs should go if they were removed.
The following fails:
This happens because:
query_result
checksis_applicable_property_v<executor_t,allocator_t<void>>
,allocator_t<T>::is_applicable_property_v
checksis_executor<executor_t>
,is_nothrow_copy_constructible_v<executor_t>
, which fails,basic_system_executor
has copy special member functions implicitly defaulted, which makes themnoexcept(false)
,basic_system_executor
has a member of typemy_allocator_t
andboost::container::pmr::polymorphic_allocator<T>
has user-provided copy constructor/assignment functions that are not markednoexcept
, defaulting tonoexcept(false)
.While many "Throws: Nothing." functions are not
noexcept
at the language level for various reasons, I believe ASIO has the right to check this property formally on special member functions. Copy constructor/assignment functions inboost::container::polymorphic_allocator
should either be markedBOOST_NOEXCEPT
or removed altogether (which would also make them trivial). I don't know whether changing their triviality could be a problem and where their docs should go if they were removed.