libstdc++: Make std::move_only_function never valueless in std::variant

This is not suitable to backport, as it affects the ABI of std::variant
and so isn't appropriate for a release branch.

libstdc++-v3/ChangeLog:

	* include/bits/move_only_function.h (_Never_valueless_alt):
	Define partial specialization for std::move_only_function.
This commit is contained in:
Jonathan Wakely 2022-06-23 18:42:55 +01:00
parent da55353e95
commit a364488f7a
1 changed files with 12 additions and 0 deletions

View File

@ -183,6 +183,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
constexpr bool __is_move_only_function_v<move_only_function<_Tp>> = true;
/// @endcond
namespace __detail::__variant
{
template<typename> struct _Never_valueless_alt; // see <variant>
// Provide the strong exception-safety guarantee when emplacing a
// move_only_function into a variant.
template<typename... _Signature>
struct _Never_valueless_alt<std::move_only_function<_Signature...>>
: true_type
{ };
} // namespace __detail::__variant
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std