57namespace opExtract_impl
77std::enable_if_t<std::is_enum_v<E>,
81 return os << magic_enum::enum_name(
e);
84template <
typename... T>
88 std::apply([&](
auto&&...
e) {
97template <
typename T,
typename U>
105std::enable_if_t<is_iterable_v<T>, std::ostream&>
148template <
typename,
typename =
void>
153 std::void_t<
decltype(
154 std::declval<std::ostream&>() << std::declval<T>())>> =
true;
156template <
typename,
typename =
void>
161 std::void_t<
decltype(
163 std::declval<T>()))>>
168 isOpExtractHelped<T> && !isOpExtractNativelySupported<T>;
175 return os <<
"nullptr";
177 if constexpr (isOpExtractHelped<T> || isOpExtractNativelySupported<T>) {
178 os <<
'(' <<
p <<
": ";
190 if constexpr (isOpExtractHelped<T>) {
193 return os <<
p.value;
202 if constexpr (needsDispatch<T>) {